OpenCV 未初始化 USB 摄像头
Posted
技术标签:
【中文标题】OpenCV 未初始化 USB 摄像头【英文标题】:OpenCV not initializing USB camera 【发布时间】:2012-10-15 15:35:30 【问题描述】:我正在尝试使用 OpenCV 从 USB 摄像头捕获视频。
#include <highgui.h>
#include <iostream>
using namespace std;
using namespace cv;
int main()
VideoCapture cap (-1);
if (!cap.isOpened())
cout << "Cam initialize failed";
else cout << "Cam initialized";
return 0;
无法初始化相机。 cap.isOpened() 返回零。
相同的程序,具有相同版本的 OpenCV 和相同的 USB 摄像头,在我朋友的机器上正确运行。我正在运行Fedora 16。相机在另一个应用程序中正常工作(例如,Cheese)。
我在 Google 和 Stack Overflow 中进行了一些搜索。但没有有用的帮助。 有什么想法吗?
【问题讨论】:
您的相机可以在其他应用程序中使用吗? 你读过这个吗:***.com/questions/4749498/… @vfcosta 正如我之前提到的,相机在其他应用程序中运行良好。我在 Cheese、Kamoso 和 vlc 中使用过它。 @james 来自您提供的链接,它似乎在 highgui 中存在问题。但是那里给出的解决方案或解决方案提示是针对 Windows 的。我正在运行 linux fedora 16。我不知道在哪里可以找到要包含的适当预处理器。 @brainbarshan,我不确定如何在 linux 中包含预处理器定义,但您可以简单地将 #define HAVE_VIDEOINPUT #define HAVE_DSHOW 添加到适当的全局头文件中(尝试修改现有的 opencv 头文件)和尝试重新编译 highgui 库。顺便说一句,您使用的是最新的 OpenCV 吗? 【参考方案1】:尝试以 root 身份运行您的程序。您可能没有权限,opencv 不会告诉您是否是 cap.isOpened() 失败的原因。
【讨论】:
【参考方案2】:manual here 表示VideoCapture::VideoCapture(int device)
接受
device:打开的视频捕获设备的ID(即相机索引)。如果连接的是单个摄像头,则只需传递 0。
如果您的系统中有 1 个摄像头,我认为您应该将 -1
更改为 0
。
【讨论】:
VideoCapture cap(0) 也无法找到默认摄像头。传递 -1,搜索所有可用的相机,因此它比使用 0 更好。以上是关于OpenCV 未初始化 USB 摄像头的主要内容,如果未能解决你的问题,请参考以下文章