Opencv-Python Contour Shape Detection 轮廓形状检测

基本思路

首先,先将图像进行灰度处理,在借助模糊处理,得到边缘检测图像;接着,借用边缘检测图像,获取图像轮廓参数,通过面积,以及边框数,检测出图形的形状。OK,Let‘s go!

Opencv版本

这个opencv-contrib-python ,这是个辅助包,最好都装上且跟opencv同版本最优。
在这里插入图片描述在这里插入图片描述

函数介绍

cv2.findContours()

注意事项
  • 读取的是二值图像,黑色为背景,白色为读取目标
  • 该函数会修改原图像,需要先copy一份原图像
  • 返回的参数,会随着opencv不同版本,返回参数个数不同,一般为2或3个,报错了,加减参数就行

findContours(image, mode, method, contours=None, hierarchy=None,
offset=None)

mode

参数名称 功能
cv2.RETR_EXTERNAL 只检测外轮廓
cv2.RETR_LIST 检测的轮廓不建立等级关系,都是同级
cv2.RETR_CCOMP 建立两个等级的轮廓,上面一层为外边界,里面一层为内孔的边界信息
cv2.RETR_TREE 建立一个等级树结构的轮廓

method

参数名称 功能
cv2.CHAIN_APPROX_NONE 存储所有边界点
cv2.CHAIN_APPROX_SIMPLE 压缩垂直、水平、对角方向,只保留端点
cv2.CHAIN_APPROX_TX89_L1 使用teh-Chini近似算法
cv2.CHAIN_APPROX_TC89_KCOS 使用teh-Chini近似算法

contours

图像轮廓点。列表格式,每一个元素为一个3维数组

hierarchy

轮廓间的层次关系是三维数组,形状为(1,n,4),其中n表示轮廓总个数,4指的是用4个数表示各轮廓间的相互关系。第一个数表示同级轮廓的下一个轮廓编号,第二个数表示同级轮廓的上一个轮廓的编号,第三个数表示该轮廓下一级轮廓的编号,第四个数表示该轮廓的上一级轮廓的编号。

offset

轮廓点的偏移量,格式为tuple,如(-1,1)表示轮廓点沿X负方向偏移1个像素点,沿Y正方向偏移1个像素点(这个参数一般可以不选

返回值

(任意名称), contours,hierarchy 版本不同第一个参数根据版本来进行修改

cv2.drawContours()

cv2.drawContours(image, contours, contourIdx, color, thickness=None, lineType=None, hierarchy=None, maxLevel=None, offset=None)

image

注意要是三通道函数,可以调用原图像的复制图像

contourIdx

指定绘制轮廓list中的哪条轮廓,如果是-1,则绘制其中的所有轮廓

其余函数较为简单,代码又简单注释,感兴趣想要深入了解可以网上搜寻一下

最终代码

import cv2
import numpy as np

def stackImages(scale,imgArray):  # 堆栈操作
    rows = len(imgArray)
    cols = len(imgArray[0])
    rowsAvailable = isinstance(imgArray[0], list)
    width = imgArray[0][0].shape[1]
    height = imgArray[0][0].shape[0]
    if rowsAvailable:
        for x in range(0, rows):
            for y in range
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TommyZiAng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值