2013-03-20 58 views
11

与罗技C270(OpenCV的2.4.2/C++)在Ubuntu运行简单的照相机捕获出现此erorr消息:opencv的错误 - > HIGHGUI ERROR:V4L/V4L2:VIDIOC_S_CROP

HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP

和进一步:

Corrupt JPEG data: 2 extraneous bytes before marker 0xd1 Corrupt JPEG data: 1 extraneous bytes before marker 0xd6 Corrupt JPEG data: 1 extraneous bytes before marker 0xd0 Corrupt JPEG data: 1 extraneous bytes before marker 0xd0

我得到帧,但帧的宽度和高度写入垫对象时见下文交换的值:

Mat frame; 
videoCapture = new VideoCapture(camId); 
if(!videoCapture->isOpened()) throw Exception(); 

cout << "Frame width: " << videoCapture->get(CV_CAP_PROP_FRAME_WIDTH) << endl; 
cout << "Frame height: " << videoCapture->get(CV_CAP_PROP_FRAME_HEIGHT) << endl; 

(*videoCapture) >> frame; 

cout << "Mat width: " << frame.rows << endl; 
cout << "Mat height: " << frame.cols << endl; 

输出:

Frame width: 640 
Frame height: 480 
Mat width: 480 
Mat height: 640 

回答

2

的图像的宽度由它的列数给出。你的代码应该是

cout << "Mat width: " << frame.cols << endl; 
cout << "Mat height: " << frame.rows << endl; 

所以在宽度和高度之间没有交换。

+0

对不起,我的错-.- – user2192424 2013-03-21 18:39:50

+3

但我不知道如何摆脱你得到的错误信息。我也在我的机器上获得它们。 – carlito 2013-03-21 22:02:37

7

如果您不想调试问题,并且您的网络摄像头的画面没有任何问题显示,那么您的选择是拍摄信使。如果您从源代码构建OpenCV,则下面的说明可以工作,而不是安装预构建的二进制文件。

grep -R "Corrupt JPEG data" ~/src/opencv-2.4.4/开始,深入兔子洞,直到找到自己想要的东西。在我的情况的罪魁祸首是opencv-2.4.4/thirdparty/libjpeg/jdmarker.c:908

if (cinfo->marker->discarded_bytes != 0) { 
    WARNMS2(cinfo, JWRN_EXTRANEOUS_DATA, cinfo->marker->discarded_bytes, c); 
    cinfo->marker->discarded_bytes = 0; 
    } 

WARNMS2宏是什么导致要打印有关无关的数据的错误消息。只需发表评论,重建OpenCV并继续您的工作。我也有一个C270,运行Ubuntu 12.04,并且经历了相同的唠叨的错误消息,直到我做了我上面描述的。

5

关于问题:

Corrupt JPEG data: 2 extraneous bytes before marker 0xd1 Corrupt JPEG data: 1 extraneous bytes before marker 0xd6 Corrupt JPEG data: 1 extraneous bytes before marker 0xd0 Corrupt JPEG data: 1 extraneous bytes before marker 0xd0

看起来,这个问题是在库的libjpeg。由于某些未知的原因,它在OpenCV库下工作不正确。我试图编译没有JPEG的支持,它解决了这个问题。

cmake的-D CMAKE_BUILD_TYPE =释放-D CMAKE_INSTALL_PREFIX =的/ usr /本地-D BUILD_SHARED_LIBS = OFF -D BUILD_EXAMPLES = OFF -D BUILD_TESTS = OFF -D BUILD_PERF_TESTS = OFF -D WITH_JPEG = OFF -D WITH_IPP = OFF ..

你可以在我的博客的所有细节:

http://privateblog.info/linux/opencv-i-corrupt-jpeg-data-na-linux/

+2

Linux上的JDK包含它自己的libjpeg。现在我认为在编译期间使用这个库而不是从linux正确。它会导致问题。 – Kanaris007 2017-02-24 15:11:21

0

如果你只是想获得快速grep -v Corrupt摆脱输出的为不工作以某种方式 - 像我 - 你也可以重定向标准错误到没有,例如

./my_app 2> /dev/null 

python my_app.py 2> /dev/null 

这当然也会隐藏其他错误消息。

相关问题