Мне нужно использовать OpenCV с GigE Vision Ethernet Camera, но я не мог найти много полезной информации о том, как это сделать, любые указатели, документы и пример кода?
Мне нужно прочитать фреймы с камеры.
Мне нужно использовать OpenCV с GigE Vision Ethernet Camera, но я не мог найти много полезной информации о том, как это сделать, любые указатели, документы и пример кода?
Мне нужно прочитать фреймы с камеры.
Gig-E - это стандарт связи для широкого спектра камер. OpenCV теперь содержит обертку для камер Prosilica Gig-E (см. CV_CAP_PVAPI)
Но в целом лучше использовать собственный API-интерфейс камеры для получения данных, а затем использовать openCV для преобразования возвращенных данных в изображение, openCv содержит ряд шаблонов Bayer → RGB.
Модуль CvCapture удобен для тестирования, поскольку он может без видимости считываться с камеры или файла - но он не очень подходит для высокоскоростного видения в режиме реального времени
Я использую камеру uEye GigE (5240) с OpenCV. Он работает как cv:: VideoCapture из коробки. Тем не менее использование API позволяет значительно контролировать параметры камер.
вы можете это сделать! Я знаю, потому что я сделал это сам! Я сделал это, используя SDK Baumer GAPI, который является потребителем GenTL. GenTL - общий транспортный уровень, который является модулем в genIcam. Вы можете читать GenTL ЗДЕСЬ. Использование потребителя GenTL, такого как Baumer GAPI или Basler API, упрощает работу. Я решил использовать Baumer GAPI, но вы также можете использовать Basler. Они должны работать с любой совместимой с genIcam камерой. (Basler и Baumer являются основными участниками стандарта genIcam, поэтому я рекомендую использовать любой из их потребительских API).
Я сделал полностью полный способ использования Baumer GAPI SDK в другом ответе ЗДЕСЬ, поэтому я дам краткое описание того, что вам нужно сделать.
C:\Program Files\Baumer\Baumer GAPI SDK\Docs\Programmers_Guide
). См. Раздел 4.3.1 в руководстве программиста.C:\Program Files\Baumer\Baumer GAPI SDK\Components\Examples\C++\src\0_Common\005_PixelTransformation
). Скопируйте файл С++ и вставьте его в исходный каталог вашего нового проекта VS.Добавьте эти инструкции #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, которое отображает прямой канал с вашей камеры!
Как я уже сказал, это можно сделать, потому что я это сделал. Если вы столкнулись с проблемами, обратитесь к руководству программиста.
Вы не указываете тип камеры и вашей платформы. В Windows, согласно документации OpenCV:
В настоящее время два интерфейса камеры могут быть используется для Windows: видео для Windows (VFW) и Matrox Imaging Library (MIL)
Вряд ли ваш драйвер камеры GigE поддерживает VFW, а для MIL вам нужна библиотека MIL, которая не является бесплатным AFAIK.
Большинство камер GigE будут иметь API, который вы можете использовать для захвата изображений. В большинстве случаев API будет основан на GenICam. Вероятно, ваш лучший подход - использовать API, который поставляется с вашей камерой, а затем преобразовать захваченное изображение в структуру IplImage (C) или Mat (С++).