OpenCV:从USB摄像头拍摄的黑色图像

jai*_*rpe 6 usb camera opencv

我试图使用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的驱动程序吗?

谢谢

roc*_*esh 6

好.正如我在评论中答应了你的要求,抱歉让你久等了,真的很忙.几乎没有时间发布这个答案.但这里是:

这是我模拟opencv捕获黑色图像.在输出窗口中,我在评论中询问了它的内容,表明存在错误.

在此输入图像描述

经过调查,我意识到这是由于相机的可用格式: 在此输入图像描述

因为这是一个糟糕的相机.如果您有像罗技这样的更好的相机,您可以看到可用的格式更多. 在此输入图像描述

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

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
Run Code Online (Sandbox Code Playgroud)

然后网络摄像头将能够拍摄.这个网络摄像头有点故障,因此拍摄的图像并不那么漂亮.在此输入图像描述

希望这是你的问题.但也可能不是这样.我喜欢调试问题,但是我不能因为你真的很忙而放下所有可能的原因,因为你问了一个例子,这是其中之一.干杯.如果你能告诉我你输出的窗口错误说的话,我可能会提供更多帮助.

编辑(在你的评论中回答更多):

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

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

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

cout << cv::getBuildInformation() << endl;
Run Code Online (Sandbox Code Playgroud)

并粘贴媒体I/O和视频I/O的结果?我想看看结果.我也怀疑你的库依赖,但是因为你说它适用于罗技相机,我怀疑是这样的.当然,这总是有可能是因为相机与OpenCV不兼容.顺便提一下相机有没有品牌?

3)或者,只是搜索的USB驱动程序的在线和安装它,我有一个朋友,谁这样做了类似的问题,但不能确定的,这一进程.


4no*_*ou5 1

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

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 ); 
Run Code Online (Sandbox Code Playgroud)

IplImage* frame = cvQueryFrame( capture ); 
Run Code Online (Sandbox Code Playgroud)