【问题标题】:OpenCV: black image captured from usb cameraOpenCV:从 USB 摄像头捕获的黑色图像
【发布时间】:2014-03-17 22:37:18
【问题描述】:

我正在尝试使用 opencv 从 USB 摄像头捕获图像帧。但是我总是得到一个黑框。我已经阅读了许多有关此问题的帖子并尝试了所有建议,但对我没有任何帮助。

我开始使用这里讨论的代码: http://opencv-users.1802565.n2.nabble.com/Using-USB-Camera-td6786148.html

我尝试在许多“关键”句子之后包含方法 cvWaitKey(1000)。如您所见,等待值非常高(1000)。

我也尝试保存图像帧,同样,它是黑色图像。

我正在使用以下系统:

  • OpenCV 2.2.0
  • Windows 7,32 位
  • Visual Studio 2010 (C++)
  • 一个板载usb摄像头(我不知道制造商)

USB 摄像头可与 AMCAP.EXE 1.00 配合使用。

可能是因为 Windows 使用了相机驱动程序吗?我可以换成其他更适合 OpenCV 2.2.0 的驱动程序吗?

谢谢

【问题讨论】:

  • 我可以看到你的代码抓住了框架部分吗?以便我可以提供帮助。干杯(:
  • 或者你的输出窗口说什么?
  • 我试过罗技凸轮,一切都很好......所以我想这不是代码问题......我仍然认为驱动程序在这方面起着关键作用......
  • 因为我之前也用我的 USB 相机拍摄了一张黑色图像,但我设法解决了它。当您说驾驶员发挥作用时,您是对的。这实际上是当且仅当相机与 OpenCV 不兼容时。但我还没有遇到过这样的网络摄像头。其他一些方法可能是使用 USB 驱动程序正在使用的格式(声明它并设置高度和宽度)。代码,您是否使用“CvCapture* capture = cvCaptureFromCAM(0);”和“IplImage* img=cvRetrieveFrame(capture);” ?
  • @rockinfresh,你能写一些代码来举例说明你对使用 USB 驱动程序正在使用的格式的建议吗?

标签: opencv camera usb


【解决方案1】:

好的。正如我在 cmets 中对您的要求所承诺的,抱歉让您久等了,真的很忙。也几乎没有时间发布这个答案。但这里是:

这是我模拟 opencv 正在捕获黑色图像。在输出窗口上,我曾在 cmets 中向您询问它所说的内容,显示有错误。

经过调查,我意识到这是由于相机的可用格式:

因为,这是一个更糟糕的相机。如果您有像罗技这样更好的相机,您会发现可用的格式要多得多。

有很多方法,你可以尝试一些类似的东西

capture.set(CV_CAP_PROP_FRAME_WIDTH , 640); 
capture.set(CV_CAP_PROP_FRAME_HEIGHT , 480); 
capture.set (CV_CAP_PROP_FOURCC, CV_FOURCC('B', 'G', 'R', '3'));//diff from mine, using as example

然后网络摄像头将能够捕捉。这个摄像头有点毛病,所以拍出来的照片不是很漂亮。

希望这是您的问题。但也可能并非如此。我喜欢调试问题,但我不能放下所有可能的原因,因为我真的很忙,正如你要求的例子,这就是其中之一。干杯。如果您能告诉我您输出窗口错误的内容,我可能会提供更多帮助。

编辑(在您的 cmets 中回答更多):

好的,我想让你尝试一些事情:

1)首先,我希望您尝试使用该网络摄像头来捕获视频,而不是使用cvQueryFrame 或类似的捕获方法。等待最多可能说 10 秒,看看它是否成功。原因是,某些相机(质量较低的相机)需要很长时间才能预热,并且它们捕获的前几帧可能是空的。

2)如果第一步不起作用,请尝试输入

cout << cv::getBuildInformation() << endl;

并粘贴媒体 I/O 和视频 I/O 的结果?我想看看结果。我也会怀疑你的库依赖关系,但既然你说它适用于罗技相机,我怀疑是这种情况。当然,总有可能是因为相机不兼容 OpenCV。顺便问一下,相机有什么品牌吗?

3) 或者,只是在网上搜索 USB 驱动程序并安装它,我有一个朋友因为类似的问题而这样做,但不知道那个过程。

【讨论】:

  • 希望对您有所帮助,如果有效,请接受我的回答(我注意到您不喜欢接受别人回答您​​的问题,请问为什么?)。如果它有用或有帮助,请考虑支持它。
  • 你能分享一些你的detectDevices.exe程序的代码吗?我以前想做这样的事情,据我在其他线程中阅读,openCV 无法创建可用设备的列表......顺便说一下,我最近才发现“接受的答案”选项,这个问题在手,我一直无法解决它,但....如果我设法解决这个问题,我将没有问题勾选相应的接受答案。
  • 我的输出窗口没有错误。一切正常,唯一的问题是我得到的图像是黑色的。
  • 哈哈,我的意思是你实际上有其他问题,人们回答了这个问题。但看起来你学会了如何使用它(:好的。我编辑了我的答案。希望它有所帮助,我的直觉是这是第一步,相机需要一段时间来预热。第 3 步也应该可以工作,但我从来没有以前做过。请告诉我进展如何(:
  • detectDevices.exe 程序实际上是在一两年前在网上发现的。我曾尝试为您找到它,但恐怕搜索是徒劳的。对不起。
【解决方案2】:

我建议的第一件事是,访问此链接并检查您的相机是否正常工作

http://www.youronlinemirror.com/

如果是,那么通过下面的链接开始使用,你还会发现一个很好的 opencv c++ 代码,你正在使用的代码是 opencv1 api 的 c 代码,我宁愿鼓励你去c++ 比老版本的opencv。

http://opencv-srf.blogspot.in/2011/09/capturing-images-videos.html

如果您想为您的代码找到答案,那么它很简单,正如您所说的那样,它会出现黑屏,这发生在我使用 opencv 开始时, 它无法从设备中获取数据,所以,试试这个,它可能会像我一样工作。

添加

cvQueryFrame( capture ); 

之前

IplImage* frame = cvQueryFrame( capture ); 

【讨论】:

  • 我的相机在 youronlinemirror.com 上工作。我还尝试了带有代码的 C++ 接口:docs.opencv.org/modules/highgui/doc/… 我还尝试了您的代码建议。我总是得到黑色图像。
  • 哦,那我没有答案了,尝试使用最新版本的opencv,它可能会解决问题。大多数情况下,它确实解决了在我们的案例中很少见的问题。但是,当你说你得到一个黑色图像时,窗口是在一秒钟后关闭还是它在那里以黑屏作为正常输出窗口。
  • 程序结束后窗口关闭
  • 程序何时结束?你的意思是,当你停止调试时它会关闭,或者它会在启动后几秒钟内自动关闭。
  • 好的,那么,用最新版本的opencv试试,可能会有结果。
【解决方案3】:

我遇到了和你一样的问题。然后我只是将版本从 3.1.0 更改为 2.4.13,然后我的网络摄像头就可以工作了!没有更多的黑色图像。我猜3版本与vs15不兼容。想你可能早就解决了这个问题。但只是发帖让其他人知道他们是否碰巧有同样的问题。

【讨论】:

    【解决方案4】:

    即使我在运行 OpenCV 相关程序时也遇到了同样的黑屏问题。因此,我没有使用 USB 摄像头,而是使用了移动摄像头,效果非常好。使用 DroidCam 等 Google 应用(在移动设备和笔记本电脑/PC 上安装 DroidCam)通过 Wi-Fi 将您的移动相机连接到笔记本电脑。

    【讨论】:

      猜你喜欢
      • 2014-09-07
      • 2019-10-29
      • 2013-12-16
      • 1970-01-01
      • 1970-01-01
      • 2013-06-03
      • 2012-05-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多