我遇到了一个例程,在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视频和完美显示转换后的帧,但是当我为我的网络摄像头捕获的帧尝试相同的东西时,它不会显示任何内容,我也不会收到任何错误或类似的东西,任何想法?
答案 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
}