V4L / V4L2:VIDIOC_S_CROP> HIGHGUI错误 - 在Ubuntu网络

2019-08-17 19:17发布

与罗技C270(OpenCV的2.4.2 / C ++)在Ubuntu运行简单的照相机捕获出现此erorr消息:

HIGHGUI ERROR:V4L / V4L2:VIDIOC_S_CROP

并进一步:

损坏的JPEG数据:前标记0xd1腐败JPEG数据2个字节无关:前标记0xd6腐败JPEG数据1个字节无关:前标记0xd0腐败JPEG数据1个字节无关:标记0xd0前1个外来字节

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

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

Answer 1:

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

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

因此,有宽度和高度之间没有交换。



Answer 2:

如果你不喜欢调试问题,并没有任何问题正在显示从您的网络框架,你的选择是只拍的使者。 下面工作的说明,如果你已经建立了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,并经历了同样的唠叨错误消息,直到我做了上述我。



Answer 3:

关于问题:

损坏的JPEG数据:前标记0xd1腐败JPEG数据2个字节无关:前标记0xd6腐败JPEG数据1个字节无关:前标记0xd0腐败JPEG数据1个字节无关:标记0xd0前1个外来字节

看起来,这个问题是在库的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/



Answer 4:

如果你只是希望尽快摆脱输出和grep -v Corrupt不会为不知何故工作-像我-你也可以重定向错误输出到什么,例如,

./my_app 2> /dev/null

python my_app.py 2> /dev/null

当然,这将隐藏其他错误消息,太。



文章来源: Opencv Error on Ubuntu Webcam (Logitech C270) Capture -> HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP