在Qt标签中显示IplImages

时间:2012-05-16 22:38:15

标签: c++ linux opencv qt4

我遇到了一个例程,在Qt中从IplImage转换为QImages,我尝试了它并且它完美无缺,之后我尝试使用Iplframes在标签中显示视频,它也有效,但现在我试图显示来自我网络摄像头的实时视频,我遇到了一些麻烦,因为它没有显示任何东西,Opencv 2.3,Ubuntu Linux C ++

CvCapture* capture = cvCreateFileCapture( argv[1] );
//CvCapture* capture = cvCaptureFromCAM( 0 );
while(1) { 

    frame = cvQueryFrame( capture );
    cvWaitKey(33);
    if( !frame ) break;        
    cvCvtColor(frame,frame,CV_BGR2RGB); 
    myImage = QImage((unsigned char *)frame->imageDataOrigin,frame->width,frame->height,QImage::Format_RGB888);
    myLabel.setPixmap(QPixmap::fromImage(myImage));
    myLabel.show();
    //sleep(1);
    Sleeper::msleep(33);
}

我有两个选项,capturefromcam或capturefromavi,它转换的AVI视频和完美显示转换后的帧,但是当我为我的网络摄像头捕获的帧尝试相同的东西时,它不会显示任何内容,我也不会收到任何错误或类似的东西,任何想法?

1 个答案:

答案 0 :(得分:0)

从它的外观来看,cvCaptureFromCAM()无法在索引0找到设备。但是您不知道这一点,因为您没有采取防御性编码:cvCaptureFromCAM()在无法访问设备时返回NULL

CvCapture* capture = cvCaptureFromCAM( 0 );
if (!capture)
{
    // print error
    // quit application
}

尝试传递CV_CAP_ANY或尝试其他索引:1,2,3,如果它们都不起作用我建议您检查compatibility list并验证OpenCV是否支持您的相机。

同样应该注意cvQueryFrame()

frame = cvQueryFrame( capture );
if (!frame)
{
    // print error
    // quit application
}