OpenCV с камерами GigE Vision - PullRequest
31 голосов
/ 27 июля 2010

Мне нужно использовать OpenCV с камерой GigE Vision Ethernet, но я не смог найти много полезной информации о том, как это сделать, какие-либо указатели, документы и пример кода?

Мне нужно читать кадры изкамера.

Ответы [ 4 ]

20 голосов
/ 02 августа 2010

Gig-E - это стандарт связи для широкого спектра камер. OpenCV теперь содержит оболочку для камер Prosilica Gig-E (см. CV_CAP_PVAPI)

Но в целом лучше использовать собственный API камеры для получения данных, а затем использовать openCV для преобразования возвращаемых данных в изображение, openCv содержит несколько паттернов Байера -> процедур RGB.

Модуль CvCapture удобен для тестирования, потому что он может казаться легко читаемым с камеры или файла - но он не очень подходит для высокоскоростного обзора в реальном времени

9 голосов
/ 29 декабря 2016

Вы можете сделать это! Я использовал Baumer GAPI SDK, который является потребителем GenTL. GenTL - это общий транспортный уровень, который является модулем в genIcam. Вы можете прочитать о GenTL ЗДЕСЬ . Использование потребителя GenTL, такого как GAPI Baumer или API Basler, значительно упрощает работу. Они должны работать с любой камерой GigE.

Я сделал более всеобъемлющий способ использования GAPI SDK Баумера в другом ответе ЗДЕСЬ , поэтому я дам краткое описание того, что вам нужно.

  1. Visual Studios
  2. openCV 3 для C ++ ( ЗДЕСЬ - учебное пособие по YouTube)
  3. Baumer GAPI SDK ЗДЕСЬ
  4. (дополнительно) Проверьте камеру и сетевую карту с помощью программы Baumer's Camera Explorer. Вам необходимо включить гигантские пакеты. Вам также может понадобиться настроить IP-адрес камеры и автомобиля с помощью программы Baumer IPconfig.
  5. Настройте системные переменные. обратитесь к руководству программиста в папке документов Baumer GAPI SDK (должно быть в C:\Program Files\Baumer\Baumer GAPI SDK\Docs\Programmers_Guide). См. Раздел 4.3.1.
  6. Создайте новый проект C ++ в Visual Studios и настройте свойства. См. Раздел 4.4.1.
  7. Перейдите в папку с примерами и найдите пример 005_PixelTransformation. Должно быть в (C:\Program Files\Baumer\Baumer GAPI SDK\Components\Examples\C++\src\0_Common\005_PixelTransformation). Скопируйте файл C ++ и вставьте его в исходный каталог вашего нового проекта.
  8. Убедитесь, что вы можете собирать и компилировать. ПРИМЕЧАНИЕ. Может возникнуть проблема с деталью, которая регулирует параметры камеры (например, время экспозиции). вы должны увидеть значения пикселей, записанные на экран для первых 6 пикселей в первых 6 строках для 8 изображений.

Добавьте эти операторы #include в начало исходного файла .cpp:

#include <opencv2\core\core.hpp 
#include <opencv2\highgui\highgui.hpp> 
#include <opencv2\video\video.hpp>

Добавьте эти объявления переменных в начале функции main()

// OPENCV VARIABLE DECLARATIONS
cv::VideoWriter cvVideoCreator;                 // Create OpenCV video creator
cv::Mat openCvImage;                            // create an OpenCV image
cv::String videoFileName = "openCvVideo.avi";   // Define video filename
cv::Size frameSize = cv::Size(2048, 1088);      // Define video frame size
cvVideoCreator.open(videoFileName, CV_FOURCC('D', 'I', 'V', 'X'), 20, frameSize, true); // set the codec type and frame rate

В исходном файле 005_PixelTransformation.cpp строка 569 имеет цикл for, который повторяет 8 изображений, что говорит for(int i = 0; i < 8; i++). Мы хотим изменить это, чтобы работать непрерывно. Я сделал это, изменив его на while цикл, который говорит

while (pDataStream->GetIsGrabbing())

В цикле while есть операторы if и else для проверки формата изображения. После закрывающей скобки оператора else и перед оператором pImage->Release(); добавьте следующие строки

// OPEN CV STUFF
openCvImage = cv::Mat(pTransformImage->GetHeight(), pTransformImage->GetWidth(), CV_8U, (int *)pTransformImage->GetBuffer());

// create OpenCV window ----
cv::namedWindow("OpenCV window: Cam", CV_WINDOW_NORMAL);

//display the current image in the window ----
cv::imshow("OpenCV window : Cam", openCvImage);
cv::waitKey(1);

Убедитесь, что вы выбрали правильный формат пикселей для вашего openCvImage объекта. Я выбрал CV_8U, потому что моя камера моно 8 бит.

Когда вы собираете и компилируете, вы должны получить окно openCV, которое отображает прямую трансляцию с вашей камеры!

Как я уже сказал, это можно сделать, потому что я это сделал. Если вы столкнулись с проблемами, обратитесь к руководству программиста.

enter image description here

4 голосов
/ 30 мая 2012

Я использую камеру uEye GigE (5240) с OpenCV.Он работает как cv :: VideoCapture из коробки.Тем не менее, использование API позволяет гораздо больше контролировать параметры камеры.

3 голосов
/ 28 июля 2010

Вы не упоминаете тип камеры и вашу платформу. В Windows согласно документации OpenCV:

В настоящее время два интерфейса камеры могут быть используется в Windows: Видео для Windows (VFW) и Matrox Imaging Library (MIL)

Маловероятно, что ваш драйвер камеры GigE поддерживает VFW, а для MIL вам нужна библиотека MIL, которая не является бесплатной AFAIK.

Большинство камер GigE имеют API, который вы можете использовать для захвата изображений. В большинстве случаев API будет основан на GenICam . Вероятно, ваш лучший подход - использовать API, прилагаемый к вашей камере, а затем преобразовать захваченное изображение в структуру IplImage (C) или класс Mat (C ++).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...