OpenCv 在Win7台式机上的摄像头无法拍照

最近做实验,使用到了工业摄像头,遇到了一个很奇怪的问题。
我的OpenCv版本是4.5.2,操作系统是Win7的工控机,打算在该机器上使用工业摄像头,因此想通过OpenCv库的VideoCapture类来调用。
一开始的代码如下

using namespace std;
using namespace cv;
VideoCapture cap(0);
if (!cap.isOpened()) cout << "no open! " << endl;
Mat frame;
cap >> frame;
imshow(frame);

但是程序会执行出错,弹出错误窗口。
黑框框报错的内容为

\cap_msmf.cpp(682)CvCapture_MSMF::initStream Failed to set mediaType(stream 0, (640x480 @ 30) MFVideoFormat_RGB24(unsupported media type)

然后我检查frame变量,发现它一直是空的,也就是摄像头读取不到数据。
后来我换成了网络摄像头,发现能读取到图像,但是图像的显示又有些问题,就是它被划分成了三张灰度图,我猜想可能是读到的图像格式不对。

但是如果我把程序用到Win10系统上执行,又不会出现问题,这个问题困扰了我很久,最后我在Stackoverflow上找到了解决方法。
就是把开启摄像头那一句改成如下

VideoCapture cap(idx, CAP_DSHOW);

问题全部解决。可能是VideoCapture 自动识别到的摄像头属性不对,所以需要我们人为地去设置它。
CAP_DSHOW表明使用微软的DirectShow,该格式显示的摄像头顺序与opencv默认的打开顺序不同。(个人见解,有错误望指正)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值