Автоматический инструмент для обрезки изображений

Я хотел узнать, знает ли кто-нибудь о браузере (или, возможно, даже о Java), где я могу загрузить изображение, и оно приложит усилия, чтобы найти разных персонажей и обрезать их до отдельных изображений.

Например, на этом изображении я бы хотел, чтобы инструмент нашел три уникальных рунических символа и сохранил их в отдельных файлах. На самом деле это не OCR, потому что мы не интерпретируем символы, мы просто должны признать, что между ними есть немного пустого пространства, поэтому давайте возьмем это и сохраним их.

В моей компании есть "вы программист, так что вы должны быть в состоянии сделать это, верно?" отношение, и мне нужно предоставить решения или альтернативы требованию. Я знаю, что существует множество инструментов, в которых пользователь может обрезать вручную, но они специально ищут автоматический инструмент для снижения активности пользователя.

Если доступен (предпочтительно Java) серверный инструмент, я определенно буду к этому открыт.

Любой совет jQuery, Vue или даже Java и т. Д. Будет принят с благодарностью.

Обновление: Imagemagick работал, основываясь на ответе @fmw42 ниже, но мы нашли другой инструмент под названием Marvin Image Processing Framework, который делает то, что нам нужно, и это нативная Java.

http://marvinproject.sourceforge.net/en/index.html

2 ответа

Решение

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

Входные данные:

введите описание изображения здесь

Давайте начнем с только связанных компонентов, чтобы показать возвращаемые текстовые данные:

convert rUNOP.png -alpha off -threshold 50% -type bilevel \
-define connected-components:verbose=true \
-connected-components 4 null: | sed 's/^[ ]*//'

Objects (id: bounding-box centroid area mean-color):
0: 236x139+0+0 118.2,71.3 30849 gray(255)
2: 36x50+27+11 39.7,30.5 630 gray(0)
3: 29x50+90+11 103.3,34.3 580 gray(0)
1: 23x50+155+9 163.3,33.3 502 gray(0)
4: 13x24+160+21 165.0,32.9 243 gray(255)

Теперь объедините это с некоторыми сценариями, чтобы найти эти записи с черным, т. Е. Серым (0) цветом, и извлеките ограничивающий прямоугольник и используйте его для обрезки входного изображения.

OLDIFS=$IFS
IFS=$'\n'
arr=(`convert rUNOP.png -alpha off -threshold 50% -type bilevel \
-define connected-components:verbose=true \
-connected-components 4 null: | sed 's/^[ ]*//'`)
num=${#arr[*]}
IFS=$OLDIFS
for ((i=0; i<num; i++)); do
bbox=`echo ${arr[$i]} | cut -d\  -f2`
color=`echo ${arr[$i]} | cut -d\  -f5`
if [ "$color" = "gray(0)" ]; then
convert rUNOP.png -crop $bbox +repage rUNOP_crop_$i.gif
fi
done

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

Там нет библиотек, которые будут делать обрезку для вашего, о котором я знаю. Одним из способов решения этой проблемы является использование imagemagick для обрезки изображения, но вам придется выяснить, где обрезать.

https://www.imagemagick.org/script/api.php

Удачи:)

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