C#中Emgu.CV的Mat帧转Bitmap失败,求正确转换方法
解决Emgu.CV中Mat转Bitmap的问题
你遇到的问题是因为Emgu.CV 4.x及以上版本移除了Mat类直接的ToBitmap()方法和Bitmap属性,需要通过专门的转换工具类来处理,具体解决步骤如下:
1. 确保安装正确的NuGet包
除了Emgu.CV,还需要安装配套的Emgu.CV.Bitmap包(版本必须和Emgu.CV完全一致,避免版本兼容问题)。
2. 引入必要的命名空间
添加Emgu.CV.Bitmap命名空间,这个命名空间包含了Mat转Bitmap的扩展方法:
using Emgu.CV; using Emgu.CV.Bitmap; // 关键:这个命名空间不能少 using Emgu.CV.Structure;
3. 正确执行转换
现在可以直接调用ToBitmap()扩展方法,或者显式使用BitmapConverter类:
VideoCapture videoCapture = new VideoCapture("video.mp4"); Mat frame = new Mat(); if (videoCapture.Read(frame)) { // 方法1:使用扩展方法 Bitmap bitmapFrame = frame.ToBitmap(); // 方法2:显式调用BitmapConverter // Bitmap bitmapFrame = BitmapConverter.ToBitmap(frame); // 后续处理Bitmap... }
4. 处理颜色反转问题
如果转换后的Bitmap颜色出现反转(比如蓝色变红色),是因为Emgu.CV默认的Mat格式是BGR,而Bitmap使用的是RGB,需要先转换颜色空间:
if (videoCapture.Read(frame)) { Mat rgbFrame = new Mat(); // 将BGR格式转为RGB CvInvoke.CvtColor(frame, rgbFrame, ColorConversion.Bgr2Rgb); Bitmap bitmapFrame = rgbFrame.ToBitmap(); // ... }
内容的提问来源于stack exchange,提问作者Frost Dream
相关产品推荐
相关产品推荐

