まず、これを試してみました、
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);
}
これも機能しません。
Mat
タイプを使用する代わりに、IplImage
タイプを使用することをお勧めします。次のサンプルコードを参照してください(私はOpenCvSharp2でVisualStudio2013を使用しています)。
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
これは入力レナ画像です:
そしてこれはbitmap.png
Bitmap
タイプから作成されます:
それが役に立てば幸い!
更新:
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を使用する;」これにも必要です。
他の解決策ほぼ私のために働いた。ビットマップはそこにありましたが、encoder
がnull
であるという例外がスローされることがありました。
次のコードを使用して解決しました。
private static Bitmap MatToBitmap(Mat mat) {
using (var ms = mat.ToMemoryStream()) {
return (Bitmap) Image.FromStream(ms);
}
}