Как обрезать мат в ROI в Эмгу (OpenCV для C#)

Некоторые ответы, которые я нашел, рекомендовали использовать:

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

Но это не похоже на wokr в Emgu 3.x

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;

}

Ахмед, вам действительно не нужно создавать изображение<>, чтобы создать мат. Попробуйте следующее:

Mat myNewMat = new Mat(input, crop_region);

Поскольку у вас нет RotatedRect, вам не нужно переводить повернутый прямоугольник в вертикальный прямоугольник. Таким образом, вы можете просто создать новый коврик из существующего коврика и прямоугольника.

Это должно работать и может немного упростить ваш код.

Doug

Ахмед, что не работает? Вы не получаете коврик с данными? Что такое "рама" это "рама" мат? Является ли ваш ROI случайно RotatedRect? Потому что вы правы, если используете RotatedRect, который не будет работать. Если кадр - это коврик, то то, что вы делаете, должно работать просто отлично. Нужны некоторые детали о том, что не работает.

Другие вопросы по тегам