我正试图用opencv从USB摄像头上捕捉到一个图像帧。然而,我总是得到一个黑色的框架。我看过很多关于这个问题的帖子,并且尝试了所有的建议,但对我来说都没有用。
我开始使用这里讨论的代码:http://opencv-users.1802565.n2.nabble.com/Using-USB-Camera-td6786148.html
我尝试过在许多“关键”句子之后加入cvWaitKey(1000)方法。如您所见,等待值非常高(1000)。
我也试图保存图像帧,同样,它也是一个黑色的图像。
我使用的系统如下:
usb摄像头与AMCAP.EXE 1.00很好地工作。
可能是因为Windows使用了摄像头驱动程序吗?我可以换到其他在OpenCV 2.2.0中工作更好的驱动程序吗?
谢谢
发布于 2014-02-25 17:04:30
好的。正如我答应给你的请求在评论中,抱歉让你久等了,真的很忙。也几乎没有时间贴出这个答案。但这就是:
这是我在模拟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然后摄像头就能拍到了。这个摄像头有点问题,所以拍到的图像也没那么漂亮。

希望这是你的问题。但情况可能并非如此。我喜欢调试问题,但我不能把所有可能发生在你身上的原因都记下来,因为我真的很忙,正如你要求的一个例子,这就是其中之一。干杯。如果您能告诉我您输出窗口错误时说了什么,我可能会提供更多帮助。
编辑(在评论中回答更多):
好吧,我想让你试试几件事:
1)首先,不要使用cvQueryFrame或类似的捕获方法,我希望您尝试使用该摄像头来捕获视频。等到10秒钟,看看它是否成功。原因是,一些相机(低质量的)需要相当长的时间来热身,它们捕捉到的最初几帧可能是空的。
2)如果第一步不起作用,试着键入
cout << cv::getBuildInformation() << endl;粘贴媒体I/O和视频I/O的结果?我想看看结果。我也怀疑你的库依赖,但既然你说它与罗技相机工作,我怀疑是这样的。当然,有可能是因为相机与OpenCV不兼容。顺便问一下,这台相机有牌子吗?
3)或者,只要在网上搜索usb驱动程序并安装它,我就有一个朋友因为类似的问题而这么做,但不确定这个过程。
发布于 2014-02-18 10:11:34
我建议的第一件事是,访问这个链接,检查你的相机是否正常工作。
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 ); 发布于 2016-10-19 19:09:13
我也经历过和你一样的问题。然后我把版本从3.1.0改为2.4.13,然后我的网络摄像头就开始工作了!不再有黑色图像。我想3版本与vs15不兼容。你可能早就解决了这个问题。但只要张贴,让其他人知道,如果他们碰巧有相同的问题。
https://stackoverflow.com/questions/21849300
复制相似问题