11

首先,我试过这个,

    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 ConvertMatToBitmap(Mat matToConvert) 
    {            
        return new Bitmap(matToConvert.Cols, matToConvert.Rows, 4*matToConvert.Rows, System.Drawing.Imaging.PixelFormat.Format8bppIndexed, matToConvert.Data);
    }

这也不起作用。

在此处输入图像描述

4

3 回答 3

13

Mat我建议您不要使用类型,而是使用IplImage类型。以以下示例代码为参考(我使用 VisualStudio2013 和 OpenCvSharp2):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OpenCvSharp;
using System.Drawing;

namespace TestOpenCVSharp
{
    class Program
    {
        static void Main(string[] args)
        {
            // Read the Lenna image
            IplImage inputImage = new IplImage(@"Lenna.png");

            // Display the input image for visual inspection
            new CvWindow("original image", inputImage);
            Cv.WaitKey();

            // Convert into bitmap
            Bitmap bitimg = MatToBitmap(img);                
            // Save the bitmap
            bitimg.Save(@"bitmap.png");
        } // end of main function

        // This is the function that converts IplImage image
        // into Bitmap
        public static Bitmap MatToBitmap(IplImage image)
        {
            return OpenCvSharp.Extensions.BitmapConverter.ToBitmap(image);
        } // end of MatToBitmap function
    } // end of class definition
}  // end of namespace definition

这是您输入的 Lenna 图像:

在此处输入图像描述

这是bitmap.pngBitmap类型创建的:

在此处输入图像描述

希望能帮助到你!

更新:

通过使用 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

并且得到的结果与上图相同。

于 2016-06-10T09:01:54.837 回答
3

其他解决方案几乎对我有用。位图在那里,但有时会出现异常,说encodernull被抛出了。

我使用以下代码解决了。

private static Bitmap MatToBitmap(Mat mat) {
    using (var ms = mat.ToMemoryStream()) {
        return (Bitmap) Image.FromStream(ms);
    }
}
于 2018-04-20T16:48:46.673 回答
2

mat 有一个返回位图的方法:

        mat.ToBitmap(bitmap);

“使用 OpenCvSharp.Extensions;” 这也是需要的。

于 2016-11-04T19:16:53.370 回答