Я бы сделал это с ImageMagick , который можно установить на macOS с homebrew , используя:
brew install imagemagick
Итак, начиная с этого изображения, аннотированного с помощью macOSПредварительный просмотр и аннотация в светло-зеленом цвете с прозрачной заливкой:
Затем я сохраню этот сценарий в своем каталоге HOME как analyze
:
#!/bin/bash
if [ $# -ne 1 ] ; then
>&2 echo "Usage: analyze IMAGE"
exit 1
fi
image="$1"
# Assume image is annotated in lime green - you can set any RGB colour with syntax like "rgb(10,20,30)"
annocolour="lime"
# Calculate percentage of image inside annotation box, each line corresponds to a line of code:
# - make everything not lime green into black (image is just pure black with green annotation now)
# - add a 1-pixel black border for the floodfill in the next step to flow around
# - floodfill everything outside the annotation box with lime green starting at 0,0 in top-left corner
# - remove 1-pixel border we added above
# - make everything lime green into white (i.e. everything outside the annotation box becomes white)
# - invert the image so the contents of annotation box are white and everything else is black and print image name and mean, which is the percentage white
convert "$image" -fuzz 10% -fill black +opaque "$annocolour" \
-bordercolor black -border 1 \
-fill "$annocolour" -draw "color 0,0 floodfill" \
-shave 1x1 -alpha off \
-fill white -opaque "$annocolour" \
-negate -format "%f,%[fx:mean*100]\n" info:
Теперь, просто необходимо один раз, сделать этот сценарий исполняемым:
chmod +x $HOME/analyze
Затем я могу вычислить процентное содержание любого изображения внутри аннотированной области с лаймовым оттенком с помощью:
$HOME/analyze grab.png
Пример вывода
grab.png,2.85734
, что означает, что 2,8% изображения находится внутри зеленой рамки.
Если у вас 500 изображений PNG,вам понадобится такой цикл:
for f in *.png; do $HOME/analyze "$f" ; done
Ключевые слова : аннотирование, область аннотации, изображение, обработка изображений, ImageMagick, macOS