用Qt显示摄像机图像给出了HIGHGUI ERROR:V4L / V4L2:VIDIOC_S_CROP

时间:2015-03-21 11:02:50

标签: c++ qt opencv

我想在我的qlabel上看到相机,但是即使我用opencv窗口也看不到它。在我开始应用程序后,opencv创建了一个小窗口,但没有图像。在日志中我可以看到错误:

HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP

(<unknown>:7534): Gtk-WARNING **: gtk_disable_setlocale() must be called before gtk_init()
In capture... 
Corrupt JPEG data: 1 extraneous bytes before marker 0xd9
Corrupt JPEG data: 1 extraneous bytes before marker 0xd9
Corrupt JPEG data: 1 extraneous bytes before marker 0xd9

这是我的简单代码:

void MainWindow::on_pushButton_clicked()
{
    CvCapture* capture = 0;
    cv::Mat frame, frameCopy;

    capture = cvCaptureFromCAM(CV_CAP_ANY); //0=default, -1=any camera, 1..99=your camera
    if(!capture)
    {
        qDebug() << "No camera detected";
    }   

    if( capture )
    {
        qDebug() << "In capture...";

        for(;;)
        {
            IplImage* iplImg = cvQueryFrame( capture );
            frame = iplImg;
            if( frame.empty() )
                break;
            if( iplImg->origin == IPL_ORIGIN_TL )
                frame.copyTo( frameCopy );
            else
                flip( frame, frameCopy, 0 );

            if( cv::waitKey( 10 ) >= 0 )
                break;
            cv::imshow("result", frameCopy);
        }
    }
    //    cv::waitKey(0);

    cvReleaseCapture(&capture);
    cvDestroyWindow("result");

}

你能不能给我一个想法,为什么我得到HIGHGUI错误以及如何解决它?

1 个答案:

答案 0 :(得分:0)

您的相机损坏了数据。所以jpeg解码器无法解码它。您可以尝试增加cvWaitKey()的持续时间。

我希望它适合你。