【图像处理】图像轮廓与分割 您所在的位置:网站首页 轮廓分析百度百科 【图像处理】图像轮廓与分割

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

2023-05-30 16:40| 来源: 网络整理| 查看: 265

目录:

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 中文教程-段力辉



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有