OpenCV:从usb摄像头捕获的黑色图像
我正在尝试使用opencv从USB摄像头捕获图像帧。然而,我总是得到一个黑色的框架。我读过很多关于这个问题的帖子,尝试过所有的建议,但都不管用 我开始使用这里讨论的代码: 我试过在许多“关键”句子之后加入cvWaitKey(1000)方法。如您所见,等待值非常高(1000) 我还试图保存图像帧,同样,它是黑色图像 我正在使用以下系统: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 2.2.0
- Windows 7,32位
- Visual Studio 2010(C++)
- 车载usb摄像头(我不知道制造商)
谢谢首先,我建议您访问此链接,检查您的相机是否正常工作
如果是,那么通过下面的链接开始处理,你也会发现一个好的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;