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

执行,完美通过。

 

转载于:https://www.cnblogs.com/sczmzx/p/10997693.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值