Подтвердить что ты не робот

OpenCV с камерами GigE Vision

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

Мне нужно прочитать фреймы с камеры.

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

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

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

  • Загрузите и установите версию Visual Studios Community (я использовал 2015)
  • загрузите и создайте openCV 3 для С++ (ЗДЕСЬ - это учебник по youtube о том, как)
  • Загрузите и установите Baumer GAPI SDK ЗДЕСЬ
  • (необязательно) Проверьте, что ваша камера и сетевая карта (NIC) работают с программой Baumer Camera Explorer. Вам нужно включить jumbo-пакеты на вашем сетевом адаптере. Вам также может потребоваться настроить IP-адрес камеры и NIC с помощью программы Baumer IPconfig.
  • Установите системные переменные. Вы можете обратиться к руководству программиста в папке документов Baumer GAPI SDK (который должен находиться на этом пути C:\Program Files\Baumer\Baumer GAPI SDK\Docs\Programmers_Guide). См. Раздел 4.3.1 в руководстве программиста.
  • Создайте новый пустой проект С++ в Visual Studios и настройте свойства. Обратитесь к разделу 4.4.1 в руководстве программиста.
  • Перейдите в папку примеров и найдите пример 005_PixelTransformation. Он должен быть расположен на этом пути (C:\Program Files\Baumer\Baumer GAPI SDK\Components\Examples\C++\src\0_Common\005_PixelTransformation). Скопируйте файл С++ и вставьте его в исходный каталог вашего нового проекта VS.
  • Убедитесь, что вы можете создавать и компилировать проект. ПРИМЕЧАНИЕ. Может возникнуть проблема с частью кода, которая регулирует параметры камеры (например, время экспозиции). вы должны увидеть значения пикселей, записанные на экран для первых 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, которое отображает прямой канал с вашей камеры!

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

введите описание изображения здесь

Ответ 4

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

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

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

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