Как обрезать мат в 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, который не будет работать. Если кадр - это коврик, то то, что вы делаете, должно работать просто отлично. Нужны некоторые детали о том, что не работает.