Как разделить мат OpenCV на прямоугольные субрегионы?

Я хочу разделить простое Mat (200х200) в разных регионах (10х10).
Я делаю 2 петли, затем я создаю Rect где я указываю переменные, которые я хочу в каждой итерации (x, y, width, height), Наконец, я сохраняю эту область изображения внутри vector из 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 Я пытаюсь создать. Он увеличивается с каждой итерацией числа столбцов.

Как я могу решить это?

0

Решение

OpenCV 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));
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]