Как определить и обрезать прямоугольник с картинки с помощью Java
Я немного новичок в обработке изображений. Что я делаю, так это распознаю прямоугольные формы (не перекрывающиеся) данного изображения и создаю отдельные изображения, обрезая их. Поэтому выводимые изображения должны быть без рамки. Я попробовал несколько примеров, но ничего из этого не получилось. К вашему сведению: эти горизонтальные прямоугольники с черной подкладкой на белом фоне. Внутри них есть несколько символов.
У кого-нибудь есть подсказка или подобный пример? С уважением на помощь
1 ответ
Это псевдо-C-код, но моя идея здесь.
Основная структура
struct data {
float pixelsNb;
int currentX;
int currentY;
}
Основной цикл
void mainLoop(){
void **imgData = getPixelsFromImage("toto.png");
struct dataRight, dataDown;
loopRight(&dataRight, imgData);
loopDown(&dataDown, imgData);
// now you data right struct contains the number of
//following black pixels to the right
// and you data down, same for the down side.
if (dataRight->pixelNb == dataDown->pixelNb) // not really, should be in %
printf("There's a square !");
}
void loopRight(struct data *dataCurrent, void **imgData){
if (imgData[dataCurrent->currentY][dataCurrent->currentX] == color(0x0)){
dataCurrent->pixelNb++;
dataCurrent->currentX++;
loopRight(dataCurrent, imgData);
}
}
void loopDown(struct data *dataCurrent, void **imgData){
if (imgData[dataCurrent->currentY][dataCurrent->currentX] == color(0x0)){
dataCurrent->pixelNb++;
dataCurrent->currentY++;
loopDown(dataCurrent, imgData);
}
}
}
Это действительно не точно. Не пытайтесь скопировать и пройти, это не удастся. Но у вас есть идея здесь. Также обратите внимание, что я проверяю только линию в верхней части, а линею на левой стороне.
XXXXXXXX
X o
X o
X o
X o
Xooooooo
Х проверены, а не о
Алгоритм здесь только для того, чтобы проверить, есть ли одинаковое число X на левой стороне и на верхней стороне. Если это так, у вас есть квадрат. Конечно, если вы хотите найти прямоугольник, вы должны проверить правую и нижнюю стороны. Тогда это будет: если есть одинаковое количество на левой стороне + нижней стороне и на верхней стороне + правой стороне, то у нас есть прямоугольник.
Такой алгоритм должен сделать свое дело.