1、基于分水岭算法的图像分割
#!/usr/bin env python3
# -*- coding:UTF8 -*-
"""
OpenCV实现了一个基于掩模的分水岭算法。在这种算法中我们要设置那些山谷点会汇合,那些不会。
这是一种交互 式的图像分割。我们要做的就是给我们已知的对象打上不同的标签。
如果某个区域肯定是前景或对象,就使用某个颜色(或灰度值)标签标记它。
如果某个区域肯定不是对象而是背景就使用另外一个颜色标签标记。
而剩下的不能确定是前景还是背景的区域就用 0 标记。这就是我们的标签。
然后实施分水岭算法。 每一次灌水,我们的标签就会被更新,当两个不同颜色的标签相遇时就构建堤坝,
直到将所有山峰淹没,最后我们得到的边界对象(堤坝)的值为 -1。
"""
import cv2 as cv
import numpy as np
img = cv.imread('img.jpg')
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
ret, thresh = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV + cv.THRESH_OTSU)
cv.imshow('thresh', thresh)
# 去除噪声
kernel = np.ones((5, 5), np.uint8)
opening = cv.morphologyEx(thresh, cv.MORPH_OPEN, kernel, iterations=3)
# 膨胀操作,用来确定背景区域
sure_bg = cv.dilate(opening, kernel, iterations=4)
cv.imshow('sure_bg', sure_bg)
#