1

我正在尝试连接 FLIR 相机并使用 OpenCV 处理帧。我用网线连接了摄像头,但 VideoCapture 对象未成功关联到摄像头;


cv::VideoCapture cam(0);            

    if (cam.isOpened() == false) {                               
        std::cout << "error: capWebcam not accessed successfully\n\n";      
        _getch();                                                          
        return(0);                                                          
    }

看起来 OpenCv 找不到它。互联网电缆用作相机的电源,只是提到这可能是相关的。我可以使用 Spinnaker SDK 来检索帧,但有没有办法不使用 sdk 并直接使用 OpenCV

4

2 回答 2

3

好的,对于那些对未来如何使用从 PointGray 相机获取的图像在 OpenCv 中工作感兴趣的人来说:

工业相机有其专有的驱动程序,它们不使用操作系统的标准视频接口。这是正常的,因为这些摄像机非常复杂,并且它们通常用于更复杂的情况,您需要完全控制摄像机。

您必须从 Point Gray 站点 ( https://www.ptgrey.com/support/downloads ) 下载相机的 SDK 并自己实现捕获。

然后,您可以将捕获的缓冲区转换为 OpenCV Mat。

int ConvertToCVmat(ImagePtr pImage)
{
    int result = 0;
    ImagePtr convertedImage = pImage->Convert(PixelFormat_BGR8, NEAREST_NEIGHBOR);

    unsigned int XPadding = convertedImage->GetXPadding();
    unsigned int YPadding = convertedImage->GetYPadding();
    unsigned int rowsize = convertedImage->GetWidth();
    unsigned int colsize = convertedImage->GetHeight();

    //image data contains padding. When allocating Mat container size, you need to account for the X,Y image data padding. 
    Mat cvimg = cv::Mat(colsize + YPadding, rowsize + XPadding, CV_8UC3, convertedImage->GetData(), convertedImage->GetStride());
    namedWindow("current Image", CV_WINDOW_AUTOSIZE);
    imshow("current Image", cvimg);
    resizeWindow("current Image", rowsize / 2, colsize / 2);
    waitKey(1);//otherwise the image will not display...
    
    return result;
}

这也很有帮助https://www.flir.ca/support-center/iis/machine-vision/application-note/getting-started-with-opencv/

于 2019-03-07T08:21:30.387 回答
0

cv::VideoCapture cam(0); 适用于安装在 PC 上的摄像头,看看您是否可以使用 VLC 或任何其他可能需要打开 VideoCapture 并通过 RTSP 连接到摄像头的应用程序

于 2019-03-06T14:09:56.347 回答