我使用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;
&#34;图片为空&#34;总是在控制台,这意味着它根本无法捕捉图像!
我遵循了一些建议,例如install&#34; v4l2ucp&#34;,但&#34; / usr / lib /&#34;下没有文件夹。命名&#34; libv4l&#34;,所以LD_PRELOAD=/usr/lib/libv4l/v4l1compat.so
不起作用。
如果有人能帮我解决项目A中的问题,我将非常感激。
答案 0 :(得分:0)
该文件可能不一定存在。试试find / -name "*v4l1compat.so*" 2>/dev/null
或find / -name "*libv4l*" 2>/dev/null
。它应该成功,因为你的项目B捕获框架就好了。然后尝试将找到的文件导出到LD_PRELOAD
。
如果它没有成功 - 请查看您的libv4l
安装。
并确保您尝试使用尚未使用的正确相机open()
。