opencvsharp BitmapSource圖片截取問題


private BitmapSource GetUiImage(FrameworkElement ui)
{
RenderTargetBitmap bmp=new RenderTargetBitmap((int)ui.ActualWidth,(int)ui.ActualHeight,96d,96d, PixelFormats.Default);
bmp.Render(ui);
return bmp;
}

獲取控件當前呈現的圖像,然后從這個圖像中截取一部分區域,我這邊先用的方法如下:

using (Mat mat = bmp.ToMat())
{
  Rect rect1 = new Rect((int) rect.Left, (int) rect.Top, (int) rect.Width, (int) rect.Height);
  using (Mat mat8U = mat[rect1])
  {
    return mat8U.ToBitmap();
  }
}

但是在執行的時候一直抱如下錯誤:

Depth of the image must be CV_8U

原來bmp.ToMat()轉換后的mat是一個CV_32U的,在執行ROI區域截取時就會出錯。

那么看來是不能直接用tomat方法,只能換個方法轉換,如下:

BitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bmp));
using (Stream sr = new MemoryStream())
{
    encoder.Save(sr);
    using (Mat mat = Mat.FromStream(sr, ImreadModes.Color))
    {
        Rect rect1 = new Rect((int) rect.Left, (int) rect.Top, (int) rect.Width, (int) rect.Height);
        using (var mat1 = mat[rect1])
        {
            return mat1.ToBitmap();
        }

    }
}
View Code

執行,完美通過。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM