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