C#中 利用OpenCvSharp4 实现bitmap 和mat的格式相互转换
时间: 2024-10-04 21:01:14 浏览: 160
C#基于OpencvSharp的摄像头的处理源码demo
在C#中,利用OpenCvSharp4来实现Bitmap(位图)和Mat(OpenCV中的矩阵)之间的格式转换,可以分为两个方向:从Bitmap到Mat和从Mat到Bitmap。这两个过程都需要通过OpenCvSharp4的API来完成。
**从Bitmap到Mat:**
```csharp
using Emgu.CV;
using System.Drawing;
// 获取Bitmap对象
Bitmap bitmap = new Bitmap("path_to_your_bitmap.jpg");
// 创建一个新的Mat对象,设置相同的宽度和高度
Mat mat = new Mat(bitmap.Height, bitmap.Width, CvType.B8UC3);
// 将Bitmap数据复制到Mat
Marshal.Copy(bitmap.GetHicon(), mat.Data.ToPointer(), mat.Size.width * mat.Size.height * 3);
```
**从Mat to Bitmap:**
```csharp
using Emgu.CV;
using System.Drawing.Imaging;
// 已经存在的Mat对象
Mat srcMat = ...;
// 初始化Bitmap对象,宽度和高度来自Mat
Bitmap bitmap = new Bitmap(srcMat.Width, srcMat.Height);
// 设置颜色通道信息
ImageAttributes attr = new ImageAttributes();
attr.SetColorSpace(ColorSpace.IccProfile, ColorSpace.IccProfile);
// 使用OpenCV的Imwrite方法,然后将Mat数据复制回Bitmap
Mat tempMat = new Mat();
srcMat.CopyTo(tempMat);
cv.ImWrite(tempMat, bitmap, attr);
```
请注意,`Emgu.CV`是OpenCvSharp的一个扩展,用于简化OpenCV API。
阅读全文