Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenCV:从usb摄像头捕获的黑色图像_Opencv_Camera_Usb - Fatal编程技术网

OpenCV:从usb摄像头捕获的黑色图像

OpenCV:从usb摄像头捕获的黑色图像,opencv,camera,usb,Opencv,Camera,Usb,我正在尝试使用opencv从USB摄像头捕获图像帧。然而,我总是得到一个黑色的框架。我读过很多关于这个问题的帖子,尝试过所有的建议,但都不管用 我开始使用这里讨论的代码: 我试过在许多“关键”句子之后加入cvWaitKey(1000)方法。如您所见,等待值非常高(1000) 我还试图保存图像帧,同样,它是黑色图像 我正在使用以下系统: OpenCV 2.2.0 Windows 7,32位 Visual Studio 2010(C++) 车载usb摄像头(我不知道制造商) usb摄像头与AM

我正在尝试使用opencv从USB摄像头捕获图像帧。然而,我总是得到一个黑色的框架。我读过很多关于这个问题的帖子,尝试过所有的建议,但都不管用

我开始使用这里讨论的代码:

我试过在许多“关键”句子之后加入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的驱动程序吗


谢谢

首先,我建议您访问此链接,检查您的相机是否正常工作

如果是,那么通过下面的链接开始处理,你也会发现一个好的OpenCV C++代码,你使用的代码是OpenCV1 API的C代码,我宁愿鼓励你去C++,而不是旧版本的OpenCV。

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

以前

IplImage* frame = cvQueryFrame( capture ); 

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

这是我在模拟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;

cout甚至我在运行OpenCV相关程序时也遇到了同样的黑屏问题。所以,我没有使用USB摄像头,而是使用了工作非常好的移动摄像头。使用谷歌应用程序,如DroidCam(在手机和笔记本电脑/PC上安装DroidCam),通过Wi-Fi将你的手机摄像头连接到笔记本电脑。

我遇到了与你相同的问题。然后我把版本从3.1.0改成了2.4.13,然后我的摄像头就可以工作了!没有更多的黑色图像。我猜3版与vs15不兼容。认为你可能早就解决了这个问题。但是,如果其他人碰巧也有同样的问题,请发帖子让他们知道。

我的相机在youronlinemirror.com上工作。我还尝试了C++接口,代码也在:我也尝试过你的代码建议。我总是得到黑色的图像。哦,我没有答案了,尝试使用最新版本的opencv,它可能会解决这个问题。在大多数情况下,它确实解决了我们案例中罕见的问题。但是,当你说你得到一个黑色的图像时,窗口是在一秒钟后关闭还是在那里以黑屏作为正常的输出窗口?你的意思是,当你停止调试时它会关闭,或者,它会在启动后几秒钟内自动关闭。好的,那么,使用最新版本的opencv进行尝试,它可能会给出结果。我可以看到你的代码捕获帧部分吗?这样我才能帮上忙。干杯(:或者你的输出窗口说什么?我试过使用罗技摄像头,效果很好…所以我想这不是代码问题…我仍然认为驱动程序在这方面起着关键作用…因为我以前也用usb摄像头拍过一张黑色图像,但我设法解决了它。你说的驱动程序起作用是对的。这实际上是如果和只有当摄像头与OpenCV不兼容时才使用。但我还没有遇到过这样的网络摄像头。其他一些方法可能是使用USB驱动程序正在使用的格式(声明并设置高度和宽度)。代码是“CvCapture*capture=cvCaptureFromCAM(0);”和“IplImage*img=cvRetrieveFrame(capture);”?@RockingFresh,你能写一些代码来举例说明你关于使用USB驱动程序所使用的格式的建议吗?希望这有帮助,如果可行,请接受我的回答(我注意到你不喜欢接受别人回答你的问题,我能问为什么?)如果它是有用的或有用的,请考虑它的投票。你能分享你的Debug?EXE程序的一些代码吗?我以前想做这样的事情,就我在其他线程中所读到的,OpenCV不能创建可用设备的列表…顺便说一下,我刚刚发现了“Acpple答案”。选项最近,有了这个问题在手,我一直无法解决它,但…如果我设法解决t
cout << cv::getBuildInformation() << endl;