OpenCV相机错误

时间:2015-03-26 18:31:36

标签: c++ opencv camera

我想在我的笔记本电脑上使用我的内置摄像头捕捉视频,但它会出错。

实际上我有一个项目需要制作一个程序来检测形状,我已经完成,直到程序可以从jpeg检测到形状,但是当我编辑代码来检测相机时,它已经来了错误。

我使用简单的代码运行相机(在谷歌上找到),当我使用我的主项目程序时它会给出同样的错误。

错误(我一直点击继续):

[1] OpenCV Error: Assertion failed (scn == 3 || scn ==4) in cv::cvtColor, ...

[2] OpenCV Error: Assertion failed (size.width)0 && size.height)0) in cv::imshow,...

[3] OpenCV Error: Bad flag (parameter or structure field0 (.....) in cvGetMat,...

我不知道如何处理上一个错误,我认为是第一次和第二次错误,因为我的相机尚未准备就绪.CMIIW

我使用此代码打开相机:

VideoCapture cap(0);  //open the default camera
cap.set(CV_CAP_PROP_FRAME_WIDTH, 640);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 480);     
if (!cap.isOpened())  //check if we succeeded       
return -1;

我的相机LED指示灯亮起,边缘"应该显示结果的窗口,但它只是空白。

希望你能帮助我。

编辑:我用以下方法解决了我的问题:

try
        {
            imshow("webcam", frame);
        }
        catch (Exception& e)
        {
            const char* err_msg = e.what();
            std::cout << "exception caught: imshow:\n" << err_msg << std::endl;
        }

[2]错误仍然显示,但之后我的相机正常工作。

1 个答案:

答案 0 :(得分:0)

此代码适用于我,使用OpenCV v2.4.10:

VideoCapture cap(0);            // Open the default camera
if (!cap.isOpened())            // Check if we succeeded
    return;

string szWebcam = "Webcam - ESC to exit";
namedWindow(szWebcam, CV_WINDOW_AUTOSIZE);
char cKey = '0';
Mat imgFrame;
for (;;)
{
    cap >> imgFrame;            // Get a new frame from camera
    imshow(szWebcam, imgFrame);     // Show image
    cKey = cvWaitKey(30);
    if (cKey == 27)                 // Is ESC, exit
        break;
}

请注意,cap.Set(CV_CAP_PROP_FRAME_WIDTH,xxx)命令取决于相机的功能。例如,在我的笔记本电脑上,相机可以提供640x480(默认)或1280x720帧。打电话给:

cap.set(CV_CAP_PROP_FRAME_WIDTH, 1280);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 720);

使我的相机提供1280x720帧。奇怪的是,我注意到使用640到1080之间的任何内容都会产生640x480的帧;使用1081或更大的任何东西,得到1280x720的帧。但是,使用不等于640或1280的数字时没有错误。您应该检查相机的规格。您还可以调用capture.get(CV_CAP_PROP_FRAME_WIDTH)来获取默认帧大小的宽度。