使用 Qt 显示相机图像给出 HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP
Posted
技术标签:
【中文标题】使用 Qt 显示相机图像给出 HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP【英文标题】:Show camera image with Qt gives HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP 【发布时间】:2015-03-21 11:02:50 【问题描述】:我试图在我的 qlabel 上看到摄像头,但即使我在 opencv 窗口中也看不到它。启动应用程序后,opencv 创建了一个小窗口,但没有图像。在日志中我可以看到错误:
HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP
(<unknown>:7534): Gtk-WARNING **: gtk_disable_setlocale() must be called before gtk_init()
In capture...
Corrupt JPEG data: 1 extraneous bytes before marker 0xd9
Corrupt JPEG data: 1 extraneous bytes before marker 0xd9
Corrupt JPEG data: 1 extraneous bytes before marker 0xd9
这是我的简单代码:
void MainWindow::on_pushButton_clicked()
CvCapture* capture = 0;
cv::Mat frame, frameCopy;
capture = cvCaptureFromCAM(CV_CAP_ANY); //0=default, -1=any camera, 1..99=your camera
if(!capture)
qDebug() << "No camera detected";
if( capture )
qDebug() << "In capture...";
for(;;)
IplImage* iplImg = cvQueryFrame( capture );
frame = iplImg;
if( frame.empty() )
break;
if( iplImg->origin == IPL_ORIGIN_TL )
frame.copyTo( frameCopy );
else
flip( frame, frameCopy, 0 );
if( cv::waitKey( 10 ) >= 0 )
break;
cv::imshow("result", frameCopy);
// cv::waitKey(0);
cvReleaseCapture(&capture);
cvDestroyWindow("result");
您能否告诉我,为什么会出现 HIGHGUI 错误以及如何解决?
【问题讨论】:
【参考方案1】:您的相机中的数据已损坏。所以jpeg解码器无法解码。您可以尝试增加 cvWaitKey() 的持续时间。
我希望它对你有用。
【讨论】:
以上是关于使用 Qt 显示相机图像给出 HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP的主要内容,如果未能解决你的问题,请参考以下文章
使用 OpenGL 在 Qt 中显示来自 DirectShow 的原始图像数据
如何使用 Qt/C++ 小部件(不是 QML)从 Android 相机获取图像