【问题标题】:Can't access webcam with OpenCV无法使用 OpenCV 访问网络摄像头
【发布时间】:2011-06-12 13:54:08
【问题描述】:

我在 win 7 64 位电脑上使用 OpenCV 2.2 和 Visual Studio 2010。

我可以通过 OpenCV 显示图片和播放 AVI 文件,如“学习 OpenCV”一书中给出的,但我无法捕获网络摄像头图像。即使是随 OpenCV 文件一起提供的示例也无法访问网络摄像头。

我被要求输入“视频源 -> 捕获源”,有两个选项:HP 网络摄像头分离器和 HP 网络摄像头。如果我选择 HP 网络摄像头,窗口会立即关闭而不显示任何错误。 (我认为任何错误消息在关闭之前都太快而无法看到)。如果我选择 HP 网络摄像头分离器,那么应​​该出现网络摄像头图像(视频)的新窗口将充满统一的灰色。网络摄像头 LED 亮起,但看不到视频。我的网络摄像头可以正常使用 flash (www.testmycam.com) 和 DirectShow http://www.codeproject.com/KB/audio-video/WebcamUsingDirectShowNET.aspx

我确实尝试使用以下方法收到一些错误消息:

#include "cv.h"
#include "highgui.h"
#include <iostream>
using namespace cv;
using namespace std;

int main(int, char**)
{
    VideoCapture cap("0"); // open the default camera
    if(!cap.isOpened())  // check if we succeeded
       {
     cout << "Error opening camera!";
     getchar();
     return -1;
 }

    Mat edges;
    namedWindow("edges",1);
    for(;;)
    {
        Mat frame;
        cap >> frame; // get a new frame from camera
        cvtColor(frame, edges, CV_BGR2GRAY);
        GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5);
        Canny(edges, edges, 0, 30, 3);
        imshow("edges", edges);
        if(waitKey(30) >= 0) break;
    }
    // the camera will be deinitialized automatically in VideoCapture destructor
    return 0;
}

我得到的错误信息是:

warning: Error opening file (C:\Users\vp\work\ocv\opencv\modules\highgui\src\cap
_ffmpeg.cpp:454)
Error opening camera!

我不知道这个“cap_ffmpeg.cpp”是什么,我不知道这是否与爱管闲事的“HP Media Smart”有什么问题。

任何帮助将不胜感激。

【问题讨论】:

  • 在 VideoCapture 行中 cap("0");我添加了“引号”。也许这就是问题所在。但是为什么默认样本不起作用?在结束进程“YouCam Mirage”pacs-portal.co.uk/startup_pages/22000-22999/… 后,如果我选择“HP Webcam”而不是“HP Webcam Spltter”,样本不会关闭。奇怪。
  • 我不知道这是否适合你,但 user660815 的回复解决了我所有的问题。您可能需要考虑将他的答案标记为正确答案。

标签: opencv webcam


【解决方案1】:

我在 Windows 7 64 位上遇到了同样的问题。我不得不重新编译 opencv_highgui,将属性页面的 C/C++ 面板中的“预处理器定义”更改为包括:

HAVE_VIDEOINPUT HAVE_DSHOW

希望对你有帮助

【讨论】:

  • 哦。我的。上帝。先生,您是我的英雄;)我搜索了几天,降级到 opencv 2.1,因为我几乎放弃了,我的所有代码在 OpenCv2.1 下都崩溃了(bloblib 遇到奇怪的异常,在 2.2 下运行良好)。跟随你的脚步,就像一个魅力。有很多人有这个问题,如果你不介意,我会传播你的建议,如果可以的话,请参考这篇 SO 帖子。
【解决方案2】:

cap_ffmpeg.cpp 是使用 ffmpeg 执行设备捕获的源文件。如果 OpenCV 给出的默认示例不适用于您的网络摄像头,那么您就不走运了。我建议你再买一个受支持的。

【讨论】:

  • 老鼠。至少现在我知道了。谢谢。
  • 如果是这样,请坚持使用 OpenCV2.1。它工作得很好。您将希望在此使用 OpenCV 提交错误。
  • 有趣的是——这个问题(以我为例)只出现在 Windows 平台上——Mac 或 Linux 上没有错误=(
【解决方案3】:

最近我安装了 OpenCV 2.2 和 NetBeans 6.9.1。我遇到了相机捕捉问题,窗口中的图像是黑色的,但程序运行完美,没有错误。我必须以管理员用户身份运行 NetBeans 才能解决此问题。

希望对大家有帮助。

【讨论】:

    【解决方案4】:

    我刚刚切换到 OpenCV 2.2 并且遇到了基本相同的问题,但运行 Vista 的 32 位计算机。网络摄像头将启动,但我会收到一条设置摄像头宽度属性的错误消息。如果我特别请求 DirectShow 摄像头,则 cvCreateCameraCapture 将失败。
    我认为正在发生的事情是,HighGUI 的分发版本是在不包括 DirectShow 相机的情况下构建的。 OpenCV 上最受欢迎的 Windows 摄像头曾经是 Video For Windows, VFW,但自从 Windows Vista 出现并产生了各种各样的问题后,它就被弃用了。为什么他们不只是包括它,我不知道。查看源文件 cap.cpp

    我的下一步是自己重建 HighGUI 并确保设置了 HAVE_DSHOW 标志。我似乎记得我一直在使用的最后一个版本的 OpenCV 遇到了同样的问题,直到我重建它并确保启用了 DirectShow 版本。

    【讨论】:

      【解决方案5】:

      我遇到了同样的问题。我的 Vaio 网络摄像头 LED 亮起,但屏幕上没有图像。 然后我尝试将第一帧导出为 JPEG 文件及其工作。然后我尝试在捕获任何帧之前插入 33 毫秒的延迟,这一次它就像一个魅力。希望这会有所帮助。

      【讨论】:

        【解决方案6】:

        这是我很久以前写的一篇文章。它使用 videoInput 库从网络摄像头获取输入。它使用 DirectX,因此几乎可以与所有网络摄像头配合使用。 Capturing images with DirectX

        【讨论】:

          【解决方案7】:

          一旦你创建了cv::VideoCapture,你应该给出一个整数而不是字符串(因为字符串意味着输入是一个文件)。

          要打开默认摄像头,请使用以下命令打开流

          cv::VideoCapture capture(0); 
          

          它会正常工作。

          【讨论】:

            【解决方案8】:

            CMAKE GUI、MSVC++10E、Vista 32bit、OpenCV2.2

            看起来HAVE_VIDEOINPUT/WITH_VIDEOINPUT 选项不起作用。

            但是添加:/D HAVE_DSHOW /D HAVE_VIDEOINPUTCMAKE_CXX_FLAGS,和 CMAKE_C_FLAGS 对我有用(由于宏重新定义会出现警告)。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2018-04-12
              • 1970-01-01
              • 2018-09-17
              • 1970-01-01
              • 1970-01-01
              • 2019-04-10
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多