0

我遇到了一个在 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);
}

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

4

1 回答 1

0

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

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

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

应同样注意cvQueryFrame()

frame = cvQueryFrame( capture );
if (!frame)
{
    // print error
    // quit application
}
于 2012-05-17T12:52:29.763 回答