好的。正如我在评论中答应您的要求一样,很抱歉让您久等了,真的很忙。也几乎没有时间发布这个答案。但这里是:
这是我模拟 opencv 正在捕获黑色图像。在输出窗口上,我在评论中询问了您它的内容,显示存在错误。
After investigating, I realised that it is due to the camera's available format:
Of cuz, this is a lousier camera. If you have a better camera like the logitech one, you can see that the format available is so much more.
方法有很多,你可以尝试一下
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
then the webcam will be able to snap. This webcam is bit faulty, hence the image snapped is not that beautiful.
希望这是你的问题。但情况也可能并非如此。我喜欢调试问题,但我无法列出发生这种情况的所有可能原因,因为我真的很忙,正如您要求的一个例子,这就是其中之一。干杯。如果您能告诉我输出窗口错误的内容,我可能可以提供更多帮助。
编辑(在您的评论中回答更多问题):
好吧,我想让你尝试一些事情:
1)首先,而不是使用cvQueryFrame
或类似的捕获方法,我希望您尝试使用该网络摄像头来捕获视频。等待大约 10 秒,看看是否成功。原因是,某些相机(质量较低的相机)需要相当长的时间才能预热,并且它们捕获的前几帧可能是空帧。
2) 如果步骤一不起作用,请尝试输入
cout << cv::getBuildInformation() << endl;
并粘贴媒体 I/O 和视频 I/O 的结果?我想看看结果。我也会怀疑你的库依赖性,但既然你说它适用于罗技相机,我怀疑情况确实如此。当然,也有可能是因为相机不兼容 OpenCV。请问这款相机有品牌吗?
3)或者,只需在线搜索USB驱动程序并安装它,我有一个朋友为类似的问题这样做,但不确定其过程。