最近做一个Net Core写的程序,其中一项功能就是获取摄像头的抓拍图片文件。在编写过程中使用到了OpenCvSharp。主要代码如下:

var cap = VideoCapture.FromCamera(0,VideoCaptureAPIs.ANY);
            cap.Set(VideoCaptureProperties.FrameWidth, 512);
            cap.Set(VideoCaptureProperties.FrameHeight, 300);
            Mat mat = new Mat();
            File.WriteAllBytes(@"D:\" + DateTime.Now.Ticks + ".png", mat.ToBytes());

以上代码就把抓到的图片保存到了D盘下面,但是在部署到生产环境时遇到错误如下:

CvCapture_MSMF::initStream Failed to set mediaType (stream 0, (640x480 @ 30) MFVideoFormat_RGB24

001

错误原因及解决解决办法如下:

报错说明

OpenCvSharp 通过 MSMF 后端打开摄像头并设置分辨率时报 CvCapture_MSMF 设置 mediaType 失败,通常是摄像头不支持该分辨率与帧率的组合,或后端与设备驱动不兼容。

处理办法

  • 先用摄像头支持的分辨率(如 640×480)测试,确认能打开后再逐档调整。
  • 改用不同的后端,如 VideoCaptureAPIs.DSHOW(Windows)。
  • 确认没有其它程序正在占用摄像头。
  • 检查 OpenCvSharp 与 OpenCV 运行库版本是否匹配。

💰 此内容为付费阅读 请先登录