Emgu.CV 中的裁剪图像

use*_*053 1 c# roi video-processing emgucv

我有图像的投资回报率,我需要创建作为图像子部分的新图像。我怎样才能做到这一点?(我想将片段制作为图像数组,而不是矩形。)

Image<Bgr, byte> img = frame.Copy();
pieces = new List<System.Drawing.Rectangle>();

int input_cell_width = img.Width / Cols;
int input_cell_height = img.Height / Rows;

System.Drawing.Rectangle old_roi = img.ROI;

for (int row = 0; row < Rows; ++row)
{
    for (int col = 0; col < Cols; ++col)
    {
        // Get template
        img.ROI = gridOuput.GetCellItemRect(row, col, new System.Drawing.Point(0, 0));
        pieces.Add(img.ROI);
    } 
}
Run Code Online (Sandbox Code Playgroud)

谢谢。

And*_*sen 6

首先设置图像的 ROI(就像您已经做的那样),然后使用 Image 的 Copy() 成员方法。只要设置了图像的 ROI,Copy() 就只会复制图像的该子部分。请参阅下面的示例。

var rois = new List<Rectangle>(); // List of rois
var imageparts = new List<Image<Gray,byte>>(); // List of extracted image parts

using (var image = new Image<Gray, byte>(...))
{
    foreach (var roi in rois)
    {
        image.ROI = roi;
        imageparts.Add(image.Copy());   
    }
}
Run Code Online (Sandbox Code Playgroud)