2016-10-14 2 views
1

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

Необходимо найти положения блоков и определить координаты x, y, x2, y2, чтобы я знал, как изменить размер миниатюры.

Image with transparent

Кто-то знает, как я могу сделать это с помощью PIL, или, может быть, инструменты Unix. Спасибо за любую помощь

+0

Дело в том, что вы не можете ожидать блок, потому что звезда-образную форму, не один. –

ответ

3

Вы можете сделать это в командной строке с ImageMagick, или в Python, Perl, PHP или C/C++.

Во-первых, извлечь альфа-канал:

convert input.png -alpha extract alpha.png 

enter image description here

Но я собираюсь сделать морфологию и я хочу белый на черном, так инвертировать:

convert input.png -alpha extract -negate alpha.png 

enter image description here

Теперь запустите "Connected Components" анализ, чтобы найти сгустки белого:

convert input.png -alpha extract -negate -threshold 50% \ 
    -define connected-components:verbose=true   \ 
    -define connected-components:area-threshold=100  \ 
    -connected-components 8 -auto-level null: 

Выходные

Objects (id: bounding-box centroid area mean-color): 
    0: 600x376+0+0 249.7,205.3 129723 srgb(0,0,0) 
    2: 203x186+70+20 170.8,112.6 27425 srgb(255,255,255) 
    1: 218x105+337+13 445.5,65.0 22890 srgb(255,255,255) 
    4: 218x105+337+251 445.5,303.0 22890 srgb(255,255,255) 
    3: 218x104+337+132 445.5,183.5 22672 srgb(255,255,255) 

И там они. Игнорируйте первую строку, потому что она черная и соответствует всему изображению. Теперь посмотрим на вторую строку, и вы увидите, что блок равен 203x186 при смещении + 70 + 20. Центроид тоже есть. Позвольте мне боксировать, что капля в красный:

convert input.png -stroke red -fill none -draw "rectangle 70,20 272,205" z.png 

enter image description here

+0

это потрясающе :) Спасибо – comalex3

Смежные вопросы