Opencv videocapture无法捕获图像

Opencv videocapture无法捕获图像,opencv,cmake,video-capture,Opencv,Cmake,Video Capture,我正在使用cmake用opencv构建我的项目。在顶层目录下有两个子项目A和B。A没有opencv功能,而B使用视频捕获从网络摄像头获取图像。一开始没有问题 但是,在我将代码从B添加到A后,B仍然可以从网络摄像头捕获图像,但A无法执行相同的操作,错误如下: HIGHGUI ERROR: V4L2: Pixel format of incoming image is unsupported by OpenCV VIDIOC_STREAMON: Inappropriate ioctl for dev

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

但是,在我将代码从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;
控制台中始终显示图像为空,这意味着它根本无法捕获图像!! 我遵循了一些建议,比如安装v4l2ucp,但是/usr/lib/下没有名为libv4l的文件夹,所以LD_PRELOAD=/usr/lib/libv4l/v4l1compat.so不起作用


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

文件可能不一定在那里。请尝试查找/-name*v4l1compat.so*2>/dev/null或查找/-name*libv4l*2>/dev/null。它应该会成功,因为您的项目B捕获的帧非常好。然后尝试将找到的文件导出到LD_PRELOAD。 如果无法成功,请检查您的libv4l安装


并确保您试图打开尚未使用的正确摄像头。

谢谢您的回答。我找到了/usr/lib/i386 linux gnu/libv4l/v4lCompat.so,并在运行项目时设置了LD_PRELOAD=/usr/lib/i386 linux gnu/libv4l/v4lCompat.so,但同样的问题仍然存在。