python 轮廓检测 OpenCV

所用函数简介

cv2.threshold() 二值化

cv2.threshold(src, thresh, maxval, type[, dst]) → retval, dst
参数意义
src表示的是图片源
thresh表示的是阈值(起始值)
maxval表示的是最大值
type表示的是这里划分的时候使用的是什么类型的算法,常用值为0(cv2.THRESH_BINARY)

cv2.findContours() 轮廓检测

cv2.findContours(image, mode, method[, contours[, hierarchy[, offset ]]]) 
参数

第一个参数是寻找轮廓的图像;

第二个参数表示轮廓的检索模式,有四种:

参数意义
cv2.RETR_EXTERNAL表示只检测外轮廓
cv2.RETR_LIST检测的轮廓不建立等级关系
cv2.RETR_CCOMP建立两个等级的轮廓,上面一层为外边界,里面一层为内孔的边界信息
cv2.RETR_TREE建立一个等级树结构的轮廓。

第三个参数method为轮廓的近似办法:

参数意义
cv2.CHAIN_APPROX_NONE存储所有的轮廓点,相邻的两个点的像素位置差不超过1,即max(abs(x1-x2),abs(y2-y1))==1
cv2.CHAIN_APPROX_SIMPLE压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个矩形轮廓只需4个点来保存轮廓信息
cv2.CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOSteh-Chinl chain 近似算法
函数版本报错:

因为cv2.findContours()函数在不同OpenCV版本返回值有着不同区别,若出现返回值不足或过多等报错,可自行调整版本号调整返回变量个数.

OpenCV2和OpenCV4中:
								
	findContours这个轮廓提取函数会返回两个值:

   	①轮廓的点集(contours)

    	②各层轮廓的索引(hierarchy)

OpenCV3中:

  	则会返回三个值:

    	①处理的图像(image)

    	②轮廓的点集(contours)

    	③各层轮廓的索引(hierarchy)

cv2.drawContours() 轮廓绘制

cv2.drawContours(image, contours, contourIdx, color[, thickness[, lineType[, hierarchy[, maxLevel[, offset]]]]]) -> image
参数:

image - 目标图像

contours - 所有的输入轮廓,每个轮廓为点矢量(a point vector)/点向量 形式,与findcontours中的返回值 contours 的列表list形式一致(具体详见代码)

contourIdx - 指定轮廓列表的索引 ID(将被绘制),若为负数,则所有的轮廓将会被绘制。

color - 绘制轮廓的颜色。

thickness - 绘制轮廓线条的宽度,若为负值或CV.FILLED则将填充轮廓内部区域

lineType - Line connectivity,(有的翻译线型,有的翻译线的连通性)

hierarchy - 层次结构信息,与函数findcontours()的hierarchy有关

maxLevel - 绘制轮廓的最高级别。若为0,则绘制指定轮廓;若为1,则绘制该轮廓和所有嵌套轮廓(nested contours);若为2,则绘制该轮廓、嵌套轮廓(nested contours)/子轮廓和嵌套-嵌套轮廓(all the nested-to-nested contours)/孙轮廓,等等。该参数只有在层级结构时才用到。

offset - 按照偏移量移动所有的轮廓(点坐标)。

代码示例

原图

轮廓检测

import numpy as np
import cv2
from scipy import ndimage
%matplotlib notebook
from matplotlib import pyplot as plt
def a(img):
    img2 = cv2.cvtColor(img, cv2.COLOR_BGRA2RGB)    
    plt.imshow(img2)


img = cv2.imread('tim.jpg')
img1 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(img1, 127, 255, 0)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
color = cv2.cvtColor(img1, cv2.COLOR_GRAY2BGR)
cv2.drawContours(color, contours, -1, (0, 255, 0), 2)
a(color)

在这里插入图片描述

代码环境介绍

处理后:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值