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 摄像头的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV C++ 相机图像未保存到矩阵

使用 Qt Gui 执行慢速实时视频源的 Opencv 人脸检测

opencv如何打开usb摄像头

opencv怎么打开usb摄像头

opencv不能打开USB摄像头问题

OpenCV 找不到我的 USB 网络摄像头