如何在Matgu中将Mat裁剪为ROI(OpenCV for C#)

时间:2017-05-23 14:04:48

标签: c# .net opencv emgucv

我发现建议使用的一些答案:

frame = ...
Rectangle ROI = ...
Mat crop = new Mat(frame, ROI) 

但这似乎并不适用于Emgu 3.x

3 个答案:

答案 0 :(得分:4)

艾哈迈德,你真的不需要创建一个图像<>只是为了创建一个Mat。请尝试以下方法:

Mat myNewMat = new Mat(input, crop_region);

由于您没有RotatedRect,因此您无需将旋转的矩形转换为直立的矩形。所以你可以从现有的Mat和矩形创建一个新的Mat。

这应该可行并且可以简化您的代码。

道格

答案 1 :(得分:3)

我明白了。要裁剪Mat,您必须使用Image对象作为缓冲区并使用其.ROI属性:

Mat crop_color_frame(Mat input, Rectangle crop_region)
{
  /*
   * TODO(Ahmed): Figure out why I had to copy this into this class.
   * */
  Image<Bgr, Byte> buffer_im = input.ToImage<Bgr, Byte>();
  buffer_im.ROI = crop_region;

  Image<Bgr, Byte> cropped_im = buffer_im.Copy();


  return cropped_im.Mat;

}

答案 2 :(得分:-1)

艾哈迈德,什么不起作用?你没有得到数据吗?什么是&#34;框架&#34;是&#34;框架&#34;垫子?你的投资回报率是偶然的RotatedRect吗?因为如果你使用的RotatedRect不能正常工作,那你就是对的。如果框架是一个垫子那么你正在做的应该工作得很好。需要一些关于什么不起作用的细节。