Белые пятна появляются на изображении, содержащем контур - PullRequest
0 голосов
/ 14 декабря 2018

Я хочу, чтобы мое изображение выглядело так.

В пурпурной области нет пятен

Однако мое изображение выглядит так, иногда появляются белые пятнав области, которая должна быть «очерчена».

Появляющиеся точки

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

Моя цель - сделать белые области на размытом изображении фиолетовыми и поместить эти фиолетовые размытые буквы / цифрывнутри расширенные буквы / цифры.Функция onechannel отображает только указанный канал R / G / B данного изображения.

def outline():

red,green,blue = range(3)
imgD = dilation(chars,7,20,480)
imgE = erosion(chars,7,20,480)
imgDOr = imgD.copy()
imgDcop = onechannel(imgD,0)
imgDcop[:,:,0] = 128
imgEcop = onechannel(imgE,2)
imgEcop[:,:,2] = 128

for i in range (0,len(imgD)):
    for j in range (0,len(imgD[0])):
        if imgE[i,j,0] == 255:
            imgDOr[i,j,0] = imgDcop[i,j,0]
            imgDOr[i,j,1] = imgDcop[i,j,1]
            imgDOr[i,j,2] = imgEcop[i,j,2]

imageshow(imgDOr)

print(outline())

1 Ответ

0 голосов
/ 14 декабря 2018

Это ошибка в вашей функции erosion, когда она не устанавливает белые пиксели на 255,255,255.Если вы проверите RGB удаленного изображения, которое вы разместили, вы увидите, что первый канал белых областей имеет значения в диапазоне от 250 до 255, а сероватые края начинаются с 239,239,239.Вам нужно либо исправить функцию erosion, чтобы строго установить для всех белых областей абсолютное значение 255,255,255, либо ослабить условие в вашей функции outline с if imgE[i,j,0] == 255: до значения, подобного if 255 - imgE[i,j,0] <= 16:.

...