Как определить и обрезать прямоугольник с картинки с помощью 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 на левой стороне и на верхней стороне. Если это так, у вас есть квадрат. Конечно, если вы хотите найти прямоугольник, вы должны проверить правую и нижнюю стороны. Тогда это будет: если есть одинаковое количество на левой стороне + нижней стороне и на верхней стороне + правой стороне, то у нас есть прямоугольник.

Такой алгоритм должен сделать свое дело.

Другие вопросы по тегам