Автоматический инструмент для обрезки изображений
Я хотел узнать, знает ли кто-нибудь о браузере (или, возможно, даже о Java), где я могу загрузить изображение, и оно приложит усилия, чтобы найти разных персонажей и обрезать их до отдельных изображений.
Например, на этом изображении я бы хотел, чтобы инструмент нашел три уникальных рунических символа и сохранил их в отдельных файлах. На самом деле это не OCR, потому что мы не интерпретируем символы, мы просто должны признать, что между ними есть немного пустого пространства, поэтому давайте возьмем это и сохраним их.
В моей компании есть "вы программист, так что вы должны быть в состоянии сделать это, верно?" отношение, и мне нужно предоставить решения или альтернативы требованию. Я знаю, что существует множество инструментов, в которых пользователь может обрезать вручную, но они специально ищут автоматический инструмент для снижения активности пользователя.
Если доступен (предпочтительно Java) серверный инструмент, я определенно буду к этому открыт.
Любой совет jQuery, Vue или даже Java и т. Д. Будет принят с благодарностью.
Обновление: Imagemagick работал, основываясь на ответе @fmw42 ниже, но мы нашли другой инструмент под названием Marvin Image Processing Framework, который делает то, что нам нужно, и это нативная Java.
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
Удачи:)