C# 4.0 如何使用OpenCVSharp将Mat转换为位图?
首先,我试过这个C# 4.0 如何使用OpenCVSharp将Mat转换为位图?,c#-4.0,image-processing,opencvsharp,C# 4.0,Image Processing,Opencvsharp,首先,我试过这个 public static Bitmap MatToBitmap(Mat mat) { return OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat); } public static Bitmap MatToBitmap(Mat mat) { mat.ConvertTo(mat, MatType.CV_8U); return Ope
public static Bitmap MatToBitmap(Mat mat)
{
return OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat);
}
public static Bitmap MatToBitmap(Mat mat)
{
mat.ConvertTo(mat, MatType.CV_8U);
return OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat);
}
所以,然后,我尝试了这个
public static Bitmap MatToBitmap(Mat mat)
{
return OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat);
}
public static Bitmap MatToBitmap(Mat mat)
{
mat.ConvertTo(mat, MatType.CV_8U);
return OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat);
}
图像完全是黑色的
这也不行
我建议您使用
IplImage
类型,而不是使用Mat
类型。以以下示例代码为参考(我使用VisualStudio2013和OpenCV2):
这是您的输入Lenna图像:
这是从bitmap
类型创建的bitmap.png
:
Mat image = new Mat(@"Lenna.png");
Cv2.ImShow("image", image);
Cv2.WaitKey();
Bitmap bitimg = MatToBitmap(image);
// Save the bitmap
bitimg.Save(@"bitmap.png");
希望有帮助
更新:
通过使用OpenCVSharp3,以下代码还可以将Mat
类型转换为Bitmap
类型:
Mat image = new Mat(@"Lenna.png");
Cv2.ImShow("image", image);
Cv2.WaitKey();
Bitmap bitimg = MatToBitmap(image);
// Save the bitmap
bitimg.Save(@"bitmap.png");
具有以下功能:
public static Bitmap MatToBitmap(Mat image)
{
return OpenCvSharp.Extensions.BitmapConverter.ToBitmap(image);
} // end of MatToBitmap function
所得结果与上述结果一致 mat有一个返回位图的方法:
mat.ToBitmap(bitmap);
“使用OpenCvSharp.Extensions;”也是需要的。其他解决方案几乎对我有效。
位图在那里,但有时会抛出异常,说明编码器
为null
我用下面的代码解决了这个问题
private static Bitmap MatToBitmap(Mat mat) {
using (var ms = mat.ToMemoryStream()) {
return (Bitmap) Image.FromStream(ms);
}
}
是否无法将mat转换为位图?能否提供创建mat的代码,以便我更好地进行评估?是的,您可以这样做,但在处理mat后无法使用位图。其他解决方案都无法与OpenCV4配合使用。