两个轮廓间的最小距离和最大距离_OpenCV 中的轮廓应用

目录:

  1. 轮廓常用函数
  2. 第一个应用
  3. 第二个应用

轮廓就是连接所有连续点(沿着边界)的曲线,具有相同的颜色或灰度值。轮廓是形状分析、物体检测和识别的有用工具。为了提高提取轮廓的精确度,需要先通过阈值处理或canny边缘检测将图像转换为二值图像。

在 OpenCV 中,寻找轮廓就像从黑色背景中寻找白色物体,所以要找到的物体应该是白色的,背景应该是黑色的。

只罗列和轮廓相关的几个函数没啥意思,通过两个例子可以对其用法有更深入的理解。

一、轮廓常用函数

1、查找轮廓

在二值图像中获取轮廓:

import cv2
im = cv2.imread('test.jpg')
imgray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(imgray, 127, 255, 0)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

cv2.findContours() 函数中有三个参数:

  • thresh:源图像
  • cv2.RETR_TREE:表示轮廓检索模式
  • cv2.CHAIN_APPROX_SIMPLE:表示轮廓近似方法

返回值为获取到的轮廓 contourshierarchycontours为包含图像中所有轮廓的python列表(三维数组),每个轮廓是包含边界所有坐标点(x, y)的Numpy数组。hierarchy 是一个三维数组,它储存了所有等高线(轮廓)的层级结构,详情可以查看 1 和 2

轮廓是具有相同灰度值的形状的边界,即一个轮廓可以看做是一个等高线。它存储形状边界的(x, y)坐标。我们可以使用第三个参数来指定是否存储形状边界的所有坐标点。

第二个参数决定 hierarchy 采取什么样的格式输出。第三个参数可以指定两个值,如果是 cv2.CHAIN_APPROX_NONE,则存储形状边界的所有坐标点。但有时我们不需要所有的点,比如一个矩形的轮廓,我们只需要矩形的四个端点就可以了。这时我们就可以传入 cv2.CHAIN_APPROX_SIMPLE,它会移除所有冗余的点并压缩轮廓,从而节省内存。

比如下面这个例子,我们标记出矩形所有轮廓点,第一张图片是使用 cv2.CHAIN_APPROX_NONE 得到的结果,一共有734个点;第二张图片是使用 cv2.CHAIN_APPROX_SIMPLE 得到的结果,只有4个点。

cd7ed49e52befd8654bf04daf6d96520.png

2、绘制轮廓

可以使用 cv2.drawContours() 函数来绘制轮廓,只要有轮廓的边界点,就可以用来绘制任何形状的轮廓。

下面是绘制轮廓的三个例子:

# To draw all the contours in an image:
cv2.drawContours(img, contours, -1, (0,255,0), 3)
# To draw an individual contour, say 4th contour:
  • 9
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值