2016-11-02 4 views
2

표제. System.Drawing.Image를 Emgu.CV.Mat로 변환하는 문제가 있습니다. Drawing.Image에서 CV.Image로 변환하려고 시도했지만 예외가 계속 발생했습니다.System.Drawing.Image to Emgu.CV.Mat

다른 해결책이 있습니까? 도움이되는 렌더링은 친절하게 평가됩니다.

답변

3

OpenCV 또는 EmguCV IMage에는 Mat 헤더가 있습니다. 내가 발견 한 트릭은 System.Drawing.Image를 Image <>으로 가져 오는 것입니다. EmguCV 3.1을 사용하는 경우 x64 용으로 컴파일해야합니다. 이 도움이

private Mat GetMatFromSDImage(System.Drawing.Image image) 
{ 
    int stride = 0; 
    Bitmap bmp = new Bitmap(image); 

    System.Drawing.Rectangle rect = new System.Drawing.Rectangle(0, 0, bmp.Width, bmp.Height); 
    System.Drawing.Imaging.BitmapData bmpData = bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, bmp.PixelFormat); 

    System.Drawing.Imaging.PixelFormat pf = bmp.PixelFormat; 
    if (pf == System.Drawing.Imaging.PixelFormat.Format32bppArgb) 
    { 
     stride = bmp.Width * 4; 
    } 
    else 
    { 
     stride = bmp.Width * 3; 
    } 

    Image<Bgra, byte> cvImage = new Image<Bgra, byte>(bmp.Width, bmp.Height, stride, (IntPtr)bmpData.Scan0); 

    bmp.UnlockBits(bmpData); 

    return cvImage.Mat; 
} 

희망 :

는 여기에 매트 개체를 얻을 수있는 간단한 방법입니다! 더그

+0

감사합니다. AeroClassics! 그것은 매력처럼 작동합니다. –

+0

대단히 환영합니다! 다행히 도울 수있어. – AeroClassics

+0

원하면 대답으로 표시하십시오. – AeroClassics