opencv - OpenCV:如何关闭二进制图像中的边缘
问题描述
我正在尝试对以下脑组织图像进行图像分割:
以下是分段结果的样子:
在对原始图像应用阈值、形态变换和轮廓区域过滤(用于去除图像中的噪声)后,我得到了以下结果:
轮廓过滤前的结果:
轮廓过滤后的结果:
然而,在我的结果中,一些黑边被分开/分开了。有什么简单的方法可以用来缩小一些边缘之间的小间隙。例如,是否可以用黑色填充红色圆圈边缘之间的空白?
任何见解都值得赞赏。
解决方案
最简单的方法是尝试使用形态学。您只需执行膨胀操作,然后执行侵蚀操作。
以下脚本使用了 opencv 的 Morphology 函数:
import numpy as np
import cv2
folder = 'C:/Users/Mark/Desktop/'
image = cv2.imread(folder + '6P7Lj.png')
image2 = cv2.bitwise_not(image)
kernel = np.ones((8,8),np.uint8)
closing = cv2.morphologyEx(image2, cv2.MORPH_CLOSE, kernel)
closing = cv2.bitwise_not(closing)
cv2.imshow('image', closing)
cv2.waitKey(0)
这是结果:
大多数边缘是连接的。我相信您可以进一步使用该函数的内核以获得更好的结果(或者甚至使用 openCV 的单独膨胀和侵蚀函数来获得更多控制)。
注意:我添加以在执行操作之前反转图像,因为它与您的图像不同,它将白色像素视为正,将黑色视为负。最后,它再次反转以返回您的格式。
推荐阅读
- python - 推文标签技术
- spring-boot - 将 spring-data-jpa 添加到 gradle 文件后出错?
- angular - 框架中 Web 组件的状态
- python - 如何在我的视图中从模型中访问未返回的 CharField?
- c# - 防止子目录成为链接的一部分?
- r - 瓷砖/记事卡 - 点击动画 - Shiny R
- ssh - 如何通过 ssh 连接到 ngrok 自托管服务器
- android-notifications - Android 应用程序是否可以访问由语音命令或日历设置的提醒
- javascript - 如果用户决定返回,则在 ajax 请求后检索 Post 数据
- python - python中的“{:<20}”format_string是什么意思?