如何将 OpenCV Mat 划分为矩形子区域?

2024-03-09

我想划分一个简单的Mat(200x200) 位于不同区域 (10x10)。 我做了两个循环,然后创建了一个Rect我在其中指出每次迭代中我想要的变量(x, y, width, height)。最后,我将图像的该区域保存在vector of Mats.

但我的代码有问题:

Mat face = Mat(200, 200, CV_8UC1);
vector<Mat> regions;
Mat region_frame;
int width = face.cols * 0.05;
int heigth = face.rows * 0.05;
for(int y=0; y<=(face.rows - heigth); y+=heigth)
{
    for(int x=0; x<=(face.cols - width); x+=width)
    {
        Rect region = Rect(x, y, x+width, y+heigth);
        region_frame = face(region);
        regions.push_back(region_frame);            
    }
}

问题出在最后一步,它不适用于新的尺寸region_frame我尝试去创造。它随着每次迭代的列数而增加。

我该如何解决这个问题?


OpenCV Rect http://docs.opencv.org/modules/core/doc/basic_structures.html#rect可以构造为:

Rect(int _x, int _y, int _width, int _height);

因此,您需要将代码中的行更改为:

Rect region = Rect(x, y, width, heigth);

看来您反而传递了左上角和右下角的坐标。如果您想这样做,请使用另一个构造函数:

Rect(const Point& pt1, const Point& pt2);

你可以这样做:

Rect region = Rect(Point(x, y), Point(x+width, y+heigth));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 OpenCV Mat 划分为矩形子区域? 的相关文章

随机推荐