OpenCV—图像轮廓1

本文介绍了OpenCV中的图像轮廓概念,包括查找和绘制轮廓的方法,如cv2.findContours()和cv2.drawContours()函数。接着讲解了轮廓的矩特征,如面积和长度的计算,以及使用Hu矩进行形状匹配和特征识别。通过实例展示了如何利用OpenCV进行轮廓分析和形状匹配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

© Fu Xianjun. All Rights Reserved.


一、 图像轮廓的概念

边缘检测虽然能够检测出边缘,但边缘是不连续的,检测到的边缘并不是一个整体。图像轮廓是指将边缘连接起来形成的一个整体,用于后续的计算。

图像轮廓是图像中非常重要的一个特征信息,通过对图像轮廓的操作,我们能够获取目标图像的大小、位置、方向等信息。

1、 查找轮廓

cv2.findContours()函数的语法为:image,contours,hierarchy=cv2.findContours(image, mode, method)

  • contours:返回的轮廓。例如contours[i]表示第i个轮廓。
  • hierarchy:图像的拓扑信息(轮廓层次)。
  • image:输入的图像。
  • mode:轮廓搜索模式:决定了轮廓的提取方式。
    cv2.RETR_EXTERNAL 只检测外轮廓
    cv2.RETR_LIST检测的轮廓不建立等级关系
    cv2.RETR_CCOMP建立两个等级的轮廓
    cv2.RETR_TREE建立一个等级树结构的轮廓
  • method:轮廓近似方法:决定了如何表达轮廓。
    cv2.CHAIN_APPROX_NONE存储所有的轮廓点
    cv2.CHAIN_APPROX_SIMPLE压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标

例如一个矩形轮廓只需4个点来保存轮廓信息。
编写代码如下(示例):

import cv2
import numpy as np
img = cv2.imread('shape.jpg')    #读取图像
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #转为灰度值图
ret, binary = cv2.threshold(gray,220,255,cv2.THRESH_BINARY) #转为二值图
contours, hierarchy = cv2.findContours(binary,cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE) #寻找轮廓
n=len(contours)       #轮廓个数
print(n)
print(len(contours[0]))       #轮廓0像素数目
print(len(contours[1]))       #轮廓1像素数目
print(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值