Как я могу заменить белый прямоугольник внутри изображения с помощью ImageMagick?

описание:

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

enter image description here

мой подход:

Я создал изображение маски с помощью floodfill и выглядит так:

enter image description here

:

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

У меня есть маленькая идея использовать ImageMagick в Чебышева оператор морфологии, но не знаю, как я могу это сделать.

1 ответов


Я думаю, что вы можете найти форму довольно точно с помощью простого порога, например:

convert image.jpg -threshold 90% result.jpg

enter image description here

и вы можете затем сделать осторожное обнаружение края, как это:

convert image.jpg -threshold 90% -canny 0x1+10%+30% result.jpg

enter image description here

следующие вещи, на которые я буду смотреть, - это использование -trim функция для поиска координат обрезки, например:

convert result.jpg -format "%@" info:
320x248+152+40

я отметил Это красным цветом под.

enter image description here

если вы действительно хотите сделать отделку, то так:

convert result.jpg -trim result.jpg

enter image description here

а также, угол deskew

convert result.jpg -deskew 40 -format "%[deskew:angle]" info:
-0.111906

обнаружение линии Hough также может быть эффективным для вас, как это:

convert image.jpg -threshold 90% -canny 0x1+10%+30%      \
    \( +clone -background none                           \
              -fill red -stroke red -strokewidth 2       \
              -hough-lines 5x5+80 -write lines.mvg       \
    \) -composite hough.png

enter image description here

и файл lines.mvg содержит 4 строки, которые вы ищете

# Hough line transform: 5x5+80
viewbox 0 0 640 360
line 449.259,0 474.432,360  # 90
line 0,72.5604 640,27.8072  # 143
line 0,293.098 640,248.344  # 187
line 153.538,0 178.712,360  # 153

будучи немного ленивым, я не чувствовал себя решающим для перекрестков из этих линий, поэтому я подумал, что позволю ImageMagick сделать это тоже-используя морфологию, чтобы искать такие пересечения линий:

convert image.jpg -threshold 90% -canny 0x1+10%+30%                        \
  \( +clone -background none -fill red -stroke red -hough-lines 5x5+80 \)  \ 
     -composite -fuzz 50% -fill black -opaque white                        \
     -morphology HMT LineJunctions hough.png

enter image description here