2016-05-31 14 views
7

Najpierw próbowałem toJak przekonwertować maty na mapę bitową za pomocą OpenCVSharp?

public static Bitmap MatToBitmap(Mat mat) 
    { 
     return OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat); 
    } 

enter image description here

Tak więc, ja próbowałem,

public static Bitmap MatToBitmap(Mat mat) 
    { 
     mat.ConvertTo(mat, MatType.CV_8U); 
     return OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat); 
    } 

Obraz jest całkowicie czarny,

enter image description here

public static Bitmap ConvertMatToBitmap(Mat matToConvert) 
    {    
     return new Bitmap(matToConvert.Cols, matToConvert.Rows, 4*matToConvert.Rows, System.Drawing.Imaging.PixelFormat.Format8bppIndexed, matToConvert.Data); 
    } 

To również nie działa.

enter image description here

Odpowiedz

8

Zamiast Mat typ, proponuję użyć IplImage typu. Weźmy następujący przykład kod jako odniesienie (używam VisualStudio2013 z 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 

To jest Twój wkład Lenna image:

enter image description here

I to jest bitmap.png, który jest tworzony z Bitmap typu:

enter image description here

Nadzieję, że to pomaga!

Aktualizacja:

Korzystając OpenCVSharp3 poniższy kod może także konwertować typ Mat do Bitmap typu:

Mat image = new Mat(@"Lenna.png"); 
Cv2.ImShow("image", image); 
Cv2.WaitKey(); 

Bitmap bitimg = MatToBitmap(image); 
// Save the bitmap 
bitimg.Save(@"bitmap.png"); 

z funkcją:

public static Bitmap MatToBitmap(Mat image) 
{ 
    return OpenCvSharp.Extensions.BitmapConverter.ToBitmap(image); 
} // end of MatToBitmap function 

i otrzymany Wynik jest taki sam, jak pokazano powyżej.

+0

Nie można przekonwertować maty na mapę bitową? – anonymous

+0

czy mógłbyś podać kod do tworzenia maty, aby móc ją lepiej ocenić? – Derman

+0

Zaktualizowałem moją odpowiedź. – Derman

1

mata posiada metodę powrotu Bitmap:

 mat.ToBitmap(bitmap); 

"za pomocą OpenCvSharp.Extensions;" jest również potrzebny do tego.

+0

Tak, możesz to zrobić, ale nie możesz użyć Bitmapy po usunięciu maty. – rism

Powiązane problemy