1,概念简介
现实中我们可以或者说可以想象有山有湖的景象,那么那一定是水绕 山,山围水的情形。当然在需要的时候,要人工构筑分水岭,以防集水盆之间的互相穿透。而区分高山(plateaus)与水的界线,以及湖与湖之间的间隔或 都是连通的关系,就是我们可爱的分水岭(watershed)

分水岭算法是在分割的过程中,它会把跟临近像素间的相似性作为重要的参考依据,从而将在空间位置上相近并且灰度值相近(求梯度)的像素点互相连接起来构成一个封闭的轮廓。

分水岭算法常用的操作步骤:彩色图像灰度化,然后再求梯度图,最后在梯度图的基础上进行分水岭算法,求得分段图像的边缘线。

如果图像中的目标物体是连接在一起的,则分割起来会更困难,分水岭分割算法经常用于处理这类问题,通常会取得比较好的效果。分水岭分割算法把图像看成一幅“地形图”,其中亮度比较强的区域像素值较大,而比较暗的区域像素值较小,通过寻找“汇水盆地”和“分水岭界限”,对图像进行分割。
2,源代码

import cv2 as cv
import numpy as npdef watershed_demo():# print(src.shape)blurred = cv.pyrMeanShiftFiltering(src, 10, 100) #边缘保留滤波去噪# gray\binary imagegray = cv.cvtColor(blurred, cv.COLOR_BGR2GRAY) #转化为灰度图ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU) #二值化cv.imshow("binary-image", binary)# morphology operation形态学操作kernel = cv.getStructuringElement(cv.MORPH_RECT, (3, 3)) #构造结构mb = cv.morphologyEx(binary, cv.MORPH_OPEN, kernel, iterations=2) #连续两次开操作(去除图像中的任何小的白噪声);闭运算(为了去除物体上的小洞)sure_bg = cv.dilate(mb, kernel, iterations=3)  #连续三次膨胀操作cv.imshow("mor-opt", sure_bg)# distance transformdist = cv.distanceTransform(mb, cv.DIST_L2, 3)#距离变化(提取出我们确信它们是硬币的区域)dist_output = cv.normalize(dist, 0, 1.0, cv.NORM_MINMAX)#归一化dist_output1 = np.uint8(dist_output)ret, surface = cv.threshold(dist, dist.max()*0.6, 255, cv.THRESH_BINARY)surface_fg = np.uint8(surface)#将float类型转化为uintcv.imshow("surface-bin", surface_fg)unknown = cv.subtract(sure_bg, surface_fg)#除种子以外的区域(剩下的区域是我们不知道的区域,无论是硬币还是背景.分水岭算法应该找到它)ret, markers = cv.connectedComponents(surface_fg) #求连通区域(创建标记:它是一个与原始图像相同大小的数组,但使用int32数据类型,并对其内部的区域进行标记.)# watershed transform 分水岭变换markers = markers + 1 # Add one to all labels so that sure background is not 0, but 1markers[unknown==255] = 0 #  mark the region of unknown with zeromarkers = cv.watershed(src, markers=markers)src[markers==-1] = [0, 0, 255]#标记cv.imshow("result", src)src = cv.imread("F:/images/coins.jpg")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
watershed_demo()
cv.waitKey(0)cv.destroyAllWindows()

OpenCV+python:分水岭算法相关推荐

  1. pythonopencv算法_python opencv之分水岭算法示例

    本文介绍了python opencv之分水岭算法示例,分享给大家,具体如下: 目标 使用分水岭算法对基于标记的图像进行分割 使用函数cv2.watershed() 原理: 灰度图像可以被看成拓扑平面, ...

  2. opencv实现分水岭算法

    opencv实现分水岭算法 // 分水岭算法原理 // IplImage* marker_mask = 0; IplImage* markers = 0; //IplImage* img0 = 0, ...

  3. 使用OpenCV的分水岭算法

    <使用OpenCV的分水岭算法>   之前利用watershed想对相对前背景较为明显的图像进行图像语义分割的预打标,因为虽然前景明显,但是边缘打标也是很困难的,可以用该方法对大部分的边缘 ...

  4. OpenCV python GrabCut算法提取前景背景图片

    OpenCV python GrabCut算法提取前景背景图片 处理图片:[lena_color.jpg] 手动mask[mask.jpg] import numpy as np import cv2 ...

  5. 【python】【openCV】分水岭算法

    脑血管医学图像颅内分割尝试--分水岭算法 code 1.2 不分割颅内直接分割 code 2.0 实验版 code 3.0 批量处理版 code 3.1 加入孔洞填充 总结 本篇博客原目的同https ...

  6. python opencv 利用分水岭算法实现对物体的分割 图文详细注释版 以分割官网提供的硬币为例

    分水岭算法可以实现自动分割多个物体,opencv中 cv.watershed() 函数实现了分水岭算法 话不多说,上代码 # 利用分水岭算法分离多个相同硬币 import numpy as np im ...

  7. 【OpenCV】- 分水岭算法

    文章目录 什么是图像分割 分水岭算法 1.实现分水岭算法:watershed()函数 2.处理流程(视频) 3.示例程序(书中) 什么是图像分割 将图像中像素根据一定的规则分为若干个cluster集合 ...

  8. opencv之分水岭算法分割及图像修补

    1)分水岭算法 原理: 任何一幅灰度图像都可以被看成是拓扑平面,灰度值高的区域可以被看成是山峰,灰度值低的区域可以被看成是山谷,我们向每一个山谷中灌不同颜色的水,随着水位的升高,不同山谷的水就会相遇汇 ...

  9. OpenCV之分水岭算法

    分水岭算法 在许多实际的应用中,我们需要分割图像,但是无法从背景图像中获得有用信息.但是分水岭算法在这方面往往非常有效,它可以将图像中的边缘转化为"山脉",将均匀区域转化为&quo ...

  10. opencv 图像分割-分水岭算法

    任何灰度图都恶意被看作是一个地形面,高强度表示山峰和山丘,低强度则表示山谷.开始使用不同的水来填充每个孤立的山谷(局部最小值).随着水的上升,来自不同山谷的水,开始融合.为了避免这种情况,在水合并的地 ...

最新文章

  1. 专业的java培训机构是否靠谱,对比一下就知道了!
  2. dedecms调用当前栏目ID与当前栏目顶级ID的方法
  3. 【C language】函数指针
  4. 【项目管理】绩效域-工件裁剪对照(工件维度)
  5. 我仅仅想安安静静的做一个编程的美男子
  6. 【Python】55个案例:吃透Python字符串格式化
  7. sql优化之:数据库索引创建原则,or/in/union与索引优化,聚集索引/非聚集索引/联合索引/索引覆盖,MySQL冗余数据的三种方案,MySQL双主一致性架构优化(来源:架构师之路)
  8. java 日期只计算年月日大小_Java 计算两个日期相差多少年月日
  9. 西安后宰门小学_重磅!西安市教育局召开发布会,将有大动作!
  10. c语言gs迭代法解方程,ex1_7-GS迭代法例题源程序及注释.pdf
  11. 保研保专硕计算机专业,如果保研只能保专硕,是否应该放弃保研自己考?
  12. 2022-2028中国智能窃听检测系统市场现状研究分析与发展前景预测报告
  13. golang的ping检测网络实现
  14. 梧桐树王牌产品金玉满堂增额终身寿险下架在即,资产焦虑就买它
  15. 思维方式-《六顶思考帽》书中的精髓:通过在同一时间只使用一顶思考帽的方法,可以解决思维混乱等问题,从而提升思考效率。
  16. Idea gitflow使用中常见问题及解决方法
  17. Debian配置国内源
  18. flash播放器JW Player使用方法
  19. dx12 龙书第四章学习笔记 -- Direct3D的初始化
  20. 计算机考研机试指南(八)——数学问题

热门文章

  1. 2022-2028年中国二次供水产业发展动态及投资战略规划报告
  2. 浅显易懂 Makefile 入门 (09)— include 文件包含、MAKECMDGOALS
  3. 认清自己,愉快度过每一天
  4. 什么是码元计算机通信
  5. 8080CPU寄存器划分
  6. LeetCode简单题之检查两个字符串数组是否相等
  7. TensorRT IRNNv2Layer
  8. 会议重点介绍芯片设计中的人工智能
  9. 处理器解决物联网和人工智能的融合
  10. 2021年大数据Hive(八):Hive自定义函数