OpenCV  4.10.0
开源计算机视觉库
正在加载...
正在搜索...
无匹配项
使用距离变换和分水岭算法进行图像分割

上一篇教程: 点多边形测试
下一篇教程: 散焦去模糊滤波器

原作者Theodore Tsesmelis
兼容性OpenCV >= 3.0

目标

在本教程中,您将学习如何

  • 使用 OpenCV 函数 cv::filter2D 进行拉普拉斯滤波以锐化图像
  • 使用 OpenCV 函数 cv::distanceTransform 获取二进制图像的距离变换表示形式,其中每个像素的值被替换为其到最近背景像素的距离
  • 使用 OpenCV 函数 cv::watershed 将图像中的对象从背景中分离出来

理论

代码

说明 / 结果

  • 加载源图像并检查它是否加载成功,然后显示它
  • 然后,如果我们有一个白色背景的图像,最好将它转换为黑色。这将帮助我们更容易地区分前景对象,当我们应用距离变换时
  • 之后,我们将锐化我们的图像,以使前景对象的边缘更加清晰。我们将应用拉普拉斯滤波器,并使用一个相当强的滤波器(二阶导数的近似值)

  • 现在,我们将新锐化的源图像分别转换为灰度图像和二值图像
  • 现在,我们准备在二值图像上应用距离变换。此外,我们将归一化输出图像,以便能够可视化和对其进行阈值化
  • 我们对 *dist* 图像进行阈值化,然后执行一些形态学操作(例如膨胀)以从上述图像中提取峰值
  • 然后,我们使用 cv::findContours 函数从每个斑点中创建一个种子/标记,用于分水岭算法
  • 最后,我们可以应用分水岭算法并可视化结果