【笔记】OpenCV3 使用分水岭算法进行图形分割

 

摘抄个原理先。。


任何一幅灰度图像都可以被看成拓扑平面,灰度值高的区域可以被看成是山峰,灰度值低的区域可以被看成是山谷。我们向每一个山谷中灌不同颜色的水,随着水的位的升高,不同山谷的水就会相遇汇合,为了防止不同山谷的水汇合,我们需要在水汇合的地方构建起堤坝。不停的灌水,不停的构建堤坝直到所有的山峰都被水淹没。我们构建好的堤坝就是对图像的分割。


  • cv2.watershed

def watershed(image, markers)

算法会根据markers传入的轮廓作为种子,对图像上其他的像素点根据分水岭算法规则进行判断,并对每个像素点的区域归属进行划定,直到处理完图像上所有像素点。而区域与区域之间的分界处的值被置为“-1”,以做区分

对要处理的图像,应用标记,至于标记怎么来,接下来按教科书式步骤 操作下。。。


  • 对图像二值化处理,使用Otsu,将图像分为黑白两部分

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('img/qian.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray.copy(), 0, 255, cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)

img1 = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
thresh = cv2.cvtColor(thresh,cv2.COLOR_BGR2RGB)
plt.subplot(121), plt.imshow(img1),plt.title('img1'),plt.xticks([]),plt.yticks([])
plt.subplot(122), plt.imshow(thresh),plt.title('thres
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值