首页 > 解决方案 > 使用opencv完成边缘补全

问题描述

我是使用opencv进行图像处理的新手,我的主要目标是在对土壤样本图像使用canny边缘检测后完成开放的相交轮廓,因为我想分割土壤颗粒并从图像中检测颗粒的像素区域。 ..我已经编写了一个代码,它将一个点作为输入并在各个方向发射光线并检测到它周围曲线的距离并可以关闭形状但我不知道如何使用它来完成轮廓该图像会自动关闭所有打开的轮廓..

图片 图 1

这是执行边缘检测并使用双边滤波器平滑图像后的结果: 在此处输入图像描述

标签: pythonopencvimage-processing

解决方案


关闭操作可以很好地关闭图片中的大部分空白:

kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(6,6))
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)

对于大小为 2 的内核,您将获得:

在此处输入图像描述

通过增加内核大小,您将能够填补更大的空白。但是,在某些时候,您将不可避免地丢失有关背景的信息,因为前景对象之间更大的间隙(可能包括部分隐藏的背景对象)也会被关闭。例如,对于 6 的内核大小,您将获得:

在此处输入图像描述

您可以尝试不同的内核大小和形式,看看哪种内核会为您的应用程序产生最佳结果。


推荐阅读