我需要将OpenCV与GigE Vision以太网相机一起使用,但我找不到有关如何执行此操作的任何有用信息,任何指针,文档和示例代码?
我需要从相机中读取帧。
答案 0 :(得分:20)
Gig-E是各种相机的通信标准。 OpenCV现在包含基于Prosilica Gig-E的摄像头的包装器(参见CV_CAP_PVAPI)
但总的来说,最好使用相机的原生API来获取数据,然后使用openCV将返回的数据转换为图像,openCv包含许多Bayer模式 - > RGB例程。
CvCapture模块便于测试,因为它可以从相机或文件中无缝读取 - 但它并不适合高速实时视觉
答案 1 :(得分:9)
你可以这样做!我使用了Baumer GAPI SDK,这是一个GenTL消费者。 GenTL是一个通用传输层,是genIcam中的一个模块。您可以阅读GenTL HERE。使用像Baumer的GAPI或Basler API这样的GenTL消费者可以让事情变得更容易。它们应该适用于任何GigE相机。
我在另一个答案HERE中采用了更全面的方式来使用堡盟的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
)中。复制C ++文件并将其粘贴到新项目的源目录中。将这些#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窗口,显示来自你的相机的实时信息!
就像我说的那样,可以做到,因为我已经做到了。如果遇到问题,请参阅程序员指南。
答案 2 :(得分:4)
我使用带有OpenCV的uEye GigE相机(5240)。它可以作为cv :: VideoCapture开箱即用。然而,使用API可以更好地控制摄像机参数。
答案 3 :(得分:3)
您没有提及相机和平台的类型。在Windows上,根据OpenCV文档:
目前有两个相机接口可以 用于Windows:Video for Windows (VFW)和Matrox成像库(MIL)
您的GigE相机驱动程序不太可能支持VFW,而对于MIL,您需要MIL库,这不是免费的AFAIK。
大多数GigE相机都有一个可用于捕捉图像的API。在大多数情况下,API将基于GenICam。可能你最好的方法是使用相机附带的API,然后将捕获的图像转换为IplImage结构(C)或Mat类(C ++)。