我使用 OpenCV 和 Qt 库以及 VS 2010 在 Win7 x64 上工作。
我想用 OpenCV 打开我的相机,然后在从 Mat 转换为 QImage 之后用 Qt 显示捕获的帧,例如使用 QLabel。
我想这样做是因为使用函数 imshow("camera", image) 和 waitKey() 会减慢流式摄像机的速度。
这是我的代码:
int main () {
QApplication a(argc, argv);
QLabel myLabel;
VideoCapture cap(0);
//namedWindow(c"camera", 1);
for (;;) {
cap >> image;
//conversion from Mat to QImage
Mat dest;
cvtColor(image, dest,CV_BGR2RGB);
QImage image1= QImage((uchar*) dest.data, dest.cols, dest.rows, dest.step, QImage::Format_RGB888);
//show Qimage using QLabel
myLabel.setPixmap(QPixmap::fromImage(image1));
myLabel.show();
//imshow("camera",image);
//if (waitKey(30)>= 0) break;
}
return a.exec();
}
网络摄像头已正确打开并且可以正常工作,但我看到的是一个白色窗口,而不是捕获的帧,正如您在这张图片中看到的那样
如果我取消注释:namedWindow (..), imshow(..), if(waitKey(..)
,它可以工作(我看到两个窗口具有相同的图像),但我用 OpenCV 显示捕获的帧,这是我想要避免的。
我的问题是:我错了??我不知道,从 Mat 到 Qimage 的转换是错误的 ??.. 或者,我不能只用 Qt 显示捕获的帧吗?
谢谢!