【问题标题】:Opencv videocapture cannot capture imageOpencv videocapture无法捕获图像
【发布时间】:2015-01-10 02:54:22
【问题描述】:

我正在使用 cmake 通过 opencv 构建我的项目。顶层目录下有两个子项目,A 和 B。 A 没有 opencv 功能,而 B 使用 VideoCapture 从网络摄像头获取图像。一开始没有问题。

但是,在我将 B 中的代码添加到 A 之后,B 仍然可以从网络摄像头捕获图像,但 A 不能做同样的事情,错误如下:

HIGHGUI ERROR: V4L2: Pixel format of incoming image is unsupported by OpenCV
VIDIOC_STREAMON: Inappropriate ioctl for device

很奇怪,我发现VideoCapture无法在A中获取图像,代码如下

VideoCapture cam;
cam.open(0);
if(!cam.isOpened()){
  cout << "Failed to open webcam" << endl;
  return false;
}
Mat Image;
cam >> Image;
if(Image.empty())
        cout<<"Image empty"<<endl;

“Image empty”总是在控制台中,这意味着它根本无法捕获图像! 我遵循了一些建议,例如安装“v4l2ucp”,但是“/usr/lib/”下没有名为“libv4l”的文件夹,所以LD_PRELOAD=/usr/lib/libv4l/v4l1compat.so 不起作用。

如果有人可以帮助我解决项目 A 中的问题,我将不胜感激。

【问题讨论】:

    标签: opencv cmake video-capture


    【解决方案1】:

    该文件可能不一定存在。试试find / -name "*v4l1compat.so*" 2&gt;/dev/nullfind / -name "*libv4l*" 2&gt;/dev/null。它应该会成功,因为您的项目 B 可以很好地捕获帧。然后尝试将找到的文件导出到LD_PRELOAD。 如果它不成功 - 检查您的 libv4l 安装。

    并确保您尝试open() 未使用的正确相机。

    【讨论】:

    • 感谢您的回答。我在运行项目时找到了/usr/lib/i386-linux-gnu/libv4l/v4l1compat.so 并设置了LD_PRELOAD=/usr/lib/i386-linux-gnu/libv4l/v4l1compat.so,但同样的问题仍然存在。
    猜你喜欢
    • 2020-02-25
    • 1970-01-01
    • 2019-01-18
    • 2020-12-19
    • 2015-07-18
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多