在Qt标签中显示IplImages

Displaying IplImages in Qt labels

本文关键字:显示 IplImages 标签 Qt      更新时间:2023-10-16

我遇到了一个在 Qt 中从 IplImage 转换为 QImages 的例程,我试过了,它工作得很好,之后我尝试使用 Iplframe 在标签中显示视频,它也有效,但现在我试图显示来自我的网络摄像头的实时视频,我遇到了某种麻烦,因为它不显示任何内容, 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 个选项,捕获从摄像头或捕获从avi,

从 avi 视频中它可以完美地转换和显示转换后的帧,但是当我对网络摄像头的捕获帧尝试同样的事情时,它不会显示任何内容,我也没有收到任何错误或类似的东西,知道吗?

从外观上看,cvCaptureFromCAM()未能在索引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
}