Member 14589606 Ответов: 1

Резка изображений на части


Как указать местоположение по указанному пикселю и выбрать конкретный регион?

case 0:
								
crop = img(Rect(0, 0, ((int)(img.cols / 2)), ((int)(img.rows / 2)))); // 
break;
case 1:
crop = img(Rect(((int)(img.cols / 2 + 1)), 0, ((int)(img.cols / 2 - 1)), ((int)(img.rows / 2))));
break;
case 2:
crop = img(Rect(0, ((int)(img.rows / 2 + 1)), ((int)(img.cols / 2)), ((int)(img.rows / 2 - 1))));
break;
case 3:
crop = img(Rect(((int)(img.cols / 2 + 1)), ((int)(img.rows / 2 + 1)), ((int)(img.cols / 2 - 1)), ((int)(img.rows / 2 - 1))));
break;


Я написал кейсы, чтобы разделить изображение на 4 разные части, но было бы очень трудно написать для 64.

Что я уже пробовал:

I want to divide the 4 into 16 and then into 64, should i DEFINE each case specifically, if yes, how do I move around

Richard MacCutchan

Вам нужно уточнить свой код, чтобы взять необходимое количество деталей и рассчитать расположение и размер для каждой детали. Это должно быть возможно с помощью петли, которая задается размерами изображения и количеством необходимых деталей.

1 Ответов

Рейтинг:
0

Rick York

Если вы пишете одну функцию для разделения области на четыре части, вы можете использовать ее для разделения области столько раз, сколько захотите. То есть до пределов используемого типа данных.

Вы почти уже там. Вы можете значительно упростить код, если сначала вычислите значения половинной ширины и половинной высоты. Вот что, что может выглядеть как :

int halfhigh = img.rows / 2;
int halfwide = img.cols / 2;
switch( region )
{
case 0: crop = img( Rect( 0,            0,            halfwide, halfhigh ) ); break;
case 1: crop = img( Rect( halfwide + 1, 0,            halfwide, halfhigh ) ); break;
case 2: crop = img( Rect( 0,            halfhigh + 1, halfwide, halfhigh ) ); break;
case 3: crop = img( Rect( halfwide + 1, halfhigh + 1, halfwide, halfhigh ) ); break;
}


Member 14589606

Как я могу использовать его, чтобы разделить его 64 раза?
У вас есть цикл, который я делаю 64 раза?

Member 14589606

Или вы имеете в виду вызвать функцию 3 раза для 64?

Rick York

Если вы правильно настроили код, каждый вызов будет разбивать его на четверти. Так что, да, позвоните ему три раза.