首页 > 解决方案 > 包含轮廓的图像中出现白点

问题描述

我希望我的图像看起来像这样。

紫色区域无斑点出现

然而,我的图像看起来像这样,在应该“勾勒出轮廓”的区域中有时会出现白点。

出现的斑点

基本上,我编写了图像侵蚀的版本以及扩张的版本Dilated。如果您想查看这两个版本的代码,请告诉我,我会添加它。

我的目标是使腐蚀图像中的白色区域变成紫色,并将这些紫色腐蚀的字母/数字放在膨胀的字母/数字内。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())

标签: pythonpython-3.xnumpyrgb

解决方案


这是您的函数中的一个错误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:.


推荐阅读