我发现建议使用的一些答案:
frame = ...
Rectangle ROI = ...
Mat crop = new Mat(frame, ROI)
但这似乎并不适用于Emgu 3.x
答案 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)