怎么将opencv的mat不是emgucv的mat转换成Bitmap
时间: 2024-03-03 12:47:28 浏览: 115
将OpenCV的Mat对象转换为Android的Bitmap对象需要进行以下步骤:
1. 首先,将OpenCV的Mat对象转换为字节数组:
```
Mat mat = ... // 获取OpenCV的Mat对象
Bitmap bitmap = Bitmap.createBitmap(mat.cols(), mat.rows(), Bitmap.Config.ARGB_8888);
Utils.matToBitmap(mat, bitmap);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();
```
2. 然后,使用字节数组创建Android的Bitmap对象:
```
Bitmap bitmap = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
```
需要注意的是,这种方法的效率可能不是很高,因为需要进行两次转换。如果需要频繁进行Mat和Bitmap对象之间的转换,可以考虑使用Emgu CV库,它可以直接将Mat对象转换为Bitmap对象。
相关问题
opencv的mat怎么换成emgucv的mat
要将OpenCV的Mat对象转换为Emgu CV的Mat对象,可以使用以下代码:
```
using Emgu.CV;
using Emgu.CV.CvEnum;
using Emgu.CV.Structure;
Mat mat = ... // 获取OpenCV的Mat对象
Image<Bgr, Byte> img = new Image<Bgr, Byte>(mat.ToImage<Bgr, Byte>().Bitmap);
Mat emguMat = img.Mat;
```
这里,我们首先将OpenCV的Mat对象转换为Emgu CV的Image<Bgr, Byte>对象,然后从Image<Bgr, Byte>对象中获取Mat对象。需要注意的是,由于Emgu CV默认使用的是BGR格式,因此需要将OpenCV的Mat对象转换为BGR格式。如果OpenCV的Mat对象使用的是灰度图像,可以使用以下代码进行转换:
```
using Emgu.CV;
using Emgu.CV.CvEnum;
using Emgu.CV.Structure;
Mat mat = ... // 获取OpenCV的Mat对象
Image<Gray, Byte> img = new Image<Gray, Byte>(mat.ToImage<Gray, Byte>().Bitmap);
Mat emguMat = img.Mat;
```
同样地,如果需要频繁进行Mat对象之间的转换,建议使用Emgu CV库,它可以直接将Mat对象转换为Bitmap对象,也可以直接在Mat对象上进行图像处理。
怎么将opencv的mat转换成Bitmap 不是emgcv的mat
将 OpenCV 的 Mat 转换为 .NET 的 Bitmap,需要使用 System.Drawing 命名空间中的类和方法。以下是一个示例代码:
```csharp
using System.Drawing;
using System.Drawing.Imaging;
using Emgu.CV;
public static Bitmap MatToBitmap(Mat mat)
{
// Convert the Mat to 24bpp BGR format
Mat matBgr = new Mat();
CvInvoke.CvtColor(mat, matBgr, Emgu.CV.CvEnum.ColorConversion.Bgr2Rgb);
matBgr.ConvertTo(matBgr, Emgu.CV.CvEnum.DepthType.Cv8U);
// Create the Bitmap from the Mat
Bitmap bitmap = new Bitmap(matBgr.Width, matBgr.Height, PixelFormat.Format24bppRgb);
BitmapData data = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height),
ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb);
Marshal.Copy(matBgr.DataPointer, data.Scan0, data.Scan0, matBgr.Rows * matBgr.Cols * matBgr.NumberOfChannels);
bitmap.UnlockBits(data);
return bitmap;
}
```
在上述代码中,我们首先将 OpenCV 的 Mat 转换为 24bpp BGR 格式,然后使用 Marshal.Copy 方法将数据从 Mat 复制到 Bitmap 中,并返回 Bitmap 对象。注意,此方法中使用的是 Emgu.CV 的 Mat 类型,而不是 .NET 的 Bitmap 类型。
阅读全文