【图像处理】图像轮廓与分割

11 篇文章 0 订阅
9 篇文章 0 订阅

目录:

  • 1、图像轮廓与图像分割。练习理解函数所包含的返回值使用findCountous和drawCountours函数进行练习
  • 2、了解分水岭算法的原理,使用API进行实现

一、图像轮廓

定义

轮廓可以简单认为成将连续的点(连着边界)连在一起的曲线,具有相同、的颜色或者灰度。轮廓在形状分析和物体的检测和识别中很有用。

  • 为了更加准确,要使用二值化图像。在寻找轮廓之前,要进行阈值化处理、或者 Canny 边界检测。
  • 查找轮廓的函数会修改原始图像。如果在找到轮廓之后还想使用原始图像的话,应该将原始图像存储到其他变量中。
  • 在 OpenCV 中,查找轮廓就像在黑色背景中超白色物体。要找的物体应该是白色而背景应该是黑色。
查找轮廓 findCountous

在二值图像中查找轮廓,函数 cv2.findContours() 有三个参数,第一个是输入图像,第二个是轮廓检索模式,第三个是轮廓近似方法。返回值有三个,第一个是图像,第二个是轮廓,第三个是(轮廓的)层析结构。轮廓(第二个返回值)是一个 Python列表,其中存储这图像中的所有轮廓。每一个轮廓都是一个 Numpy 数组,包含对象边界点(x,y)的坐标。

代码示例:

# -*- coding:utf-8 -*-
import cv2
import os

# 读入图片
imgs = cv2.imread("img.jpg")
# 使用canny边缘检测,使图像成为二值化图像
canny = cv2.Canny(imgs,50,200)
# 使用opencv自带的轮廓查找方法
image,contours,hierarchy = cv2.findContours(canny,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
# print(contours)
# 由于contours是一个python列表,循环遍历
#此图中检测到8个轮廓,0,1为最外围,2,3为最下方,4,5为右边,6,7为左边
for i in range(len(contours)):     
	# 使用轮廓绘制方法绘制轮廓,设置颜色为蓝色,i为检测出来的第几个轮廓,给定具体数值,将只绘制单个轮廓
	res = cv2.drawContours(imgs, contours, i, (255,0,0), 1)
	
cv2.imshow("canny",canny)
cv2.imshow("res",res)

在这里插入图片描述

图像的轮廓用处众多,留待以后慢慢补充吧。。。

二、分水岭算法

概念及原理

分水岭分割方法,是一种基于拓扑理论的数学形态学的分割方法,其基本思想是把图像看作是测地学上的拓扑地貌,图像中每一点像素的灰度值表示该点的海拔高度,每一个局部极小值及其影响区域称为集水盆,而集水盆的边界则形成分水岭。分水岭的概念和形成可以通过模拟浸入过程来说明。在每一个局部极小值表面,刺穿一个小孔,然后把整个模型慢慢浸入水中,随着浸入的加深,每一个局部极小值的影响域慢慢向外扩展,在两个集水盆汇合处构筑大坝,即形成分水岭。

分水岭的计算过程是一个迭代标注过程。分水岭比较经典的计算方法是L. Vincent提出的。在该算法中,分水岭计算分两个步骤,一个是排序过程,一个是淹没过程。首先对每个像素的灰度级进行从低到高排序,然后在从低到高实现淹没过程中,对每一个局部极小值在h阶高度的影响域采用先进先出(FIFO)结构进行判断及标注。

分水岭算法对微弱边缘具有良好的响应,图像中的噪声、物体表面细微的灰度变化,都会产生过度分割的现象。但同时应当看出,分水岭算法对微弱边缘具有良好的响应,是得到封闭连续边缘的保证的。另外,分水岭算法所得到的封闭的集水盆,为分析图像的区域特征提供了可能。
为消除分水岭算法产生的过度分割,通常可以采用两种处理方法,一是利用先验知识去除无关边缘信息。二是修改梯度函数使得集水盆只响应想要探测的目标。(摘自百度百科)

段力辉大神搬运的opencv官方教程给出的分水岭算法详解,奈何本人理解不透,先贴下来,留待研究。

OpenCV-Python 中文教程-段力辉

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值