python - 包含轮廓的图像中出现白点
问题描述
我希望我的图像看起来像这样。
然而,我的图像看起来像这样,在应该“勾勒出轮廓”的区域中有时会出现白点。
基本上,我编写了图像侵蚀的版本以及扩张的版本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())
解决方案
这是您的函数中的一个错误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:
.
推荐阅读
- c - 我们可以互换 C 中的 for 循环参数吗?
- reactjs - 使用反应钩子比较 prevstate 和 current state
- node.js - 我可以在 NodeJs 中使用 Sharp 直接处理缓冲区数据吗
- python - 为什么 Django 在本地无法检测到我的项目文件夹之外的静态文件?
- django - 将外键作为 ID 发布,但在 GET 方法中显示外键详细信息
- design-patterns - 在 apache Beam 中调用外部 API 的更好方法
- php - 如何检查字符是否是单词的一部分
- javascript - 如何向 PHP 后端发出带有参数的 AJAX POST 请求?
- python - [Python]:mpi4py 并行 numpy 点积
- sql-server - SQL Server 无法在 VS Code 中安装:加载 hostfxr.dll 失败