Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 如何使用OpenCVSharp将Mat转换为位图?_C# 4.0_Image Processing_Opencvsharp - Fatal编程技术网

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配合使用。