2015-09-30 5 views
0

Я хочу разделить простой Mat (200x200) в разных регионах (10x10). Я делаю 2 цикла, затем создаю Rect, где я указываю переменные, которые я хочу на каждой итерации (x, y, width, height). Наконец, я сохраняю эту область изображения внутри vectorMat s.Как разделить мат OpenCV в прямоугольных областях?

Но что-то случилось с моим кодом:

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 я пытаюсь создать. Он увеличивается с каждым количеством итераций cols.

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

+2

Вам просто нужно исправить: 'Rect область = Rect (х, у, ширина, heigth); ' – Miki

+0

Uffff !!! ужасная ошибка! Я подумал, что это будет очевидно ... Большое спасибо за помощь! –

+0

Рад, что это помогло. Я только что опубликовал подробный ответ. – Miki

ответ

3

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)); 
Смежные вопросы