Opencv进阶篇---轮廓检测

图像轮廓
边缘检测:只要梯度发生变化,零散的点都算作边缘
轮廓检测:一个链接的整体
cv.findContours(image,mode,method)
mode:轮廓检测模式
cv.RETR_EXTERNAL:只检测最外面的轮廓
cv.RETR_LIST:检测其所有轮廓,并将其保存到一条链表中
cv.RETR_CCOMP:检测所有的轮廓,并将它们组织为两层:顶层是各部分的外部边界,第二层时空洞的边界
cv.RETR_TREE:检测左右的轮廓,并构建嵌套轮廓的整个层次-----常用
method:轮廓逼近常用两种方法
cv.CHAIN_APPROX_NONE:以Freeman链码的方式输出轮廓,所有其他方式输出多边形(定点序列)
cv.CHAIN_APPROX_SIMPLE:压缩水平的、垂直的和斜的部分,即函数只保留他们的重点部分
逼近方法示意:
在这里插入图片描述
步骤检测并绘制:
1、为了更高的准确率,使用二值图像
2、轮廓绘制

src=cv.imread("E:\OpenCVTests\Samples\sample\contours.png")
gray=cv.cvtColor(src,cv.COLOR_BGR2GRAY)
ret,thresh=cv.threshold(gray,127,255,cv.THRESH_BINARY)
contours,hierarchy=cv.findContours(thresh,cv.RETR_TREE,cv.CHAIN_APPROX_NONE)
drawSrc=src.copy()#注意需要copy,否则原图会发生改变
res=cv.drawContours(drawSrc,contours,-1,(0,0,255),1)#倒数第三个参数默认为-1,表示绘制全部轮廓,指定为其他值,则在图像中进行选择单个,并且有内外圈之分;
                                                    # 最后一个参数为颜色宽度
cv.imshow("COntours",res)

简单的轮廓检测:
在这里插入图片描述
较为复杂的轮廓检测:
在这里插入图片描述
轮廓特征:
可以根据自身需要去构建其他一些衍生特征

cnt=contours[0]#当对轮廓进行特征计算时,需要取对应轮廓,设置取值
are=cv.contourArea(cnt)#面积
length=cv.arcLength(cnt,True)#周长,True表示闭合
print("Area;%s"%are)
print("Length;%s"%length)

轮廓逼近:
在这里插入图片描述
轮廓逼近原理:
在这里插入图片描述

epsilon=0.001*cv.arcLength(cnt,True)#该阈值很重要,决定了轮廓逼近的精度,可以根据检测结果适当调整
approx=cv.approxPolyDP(cnt,epsilon,True)#轮廓逼近运算,第二个值则为比较的阈值,可以自己设定,一般为周长的百分比
drawSrc1=src.copy()
dst=cv.drawContours(drawSrc1,[approx],-1,(255,0,0),3)
cv.imshow("ApproxControus",dst)

在这里插入图片描述
外接矩形、外接圆

x,y,w,h=cv.boundingRect(cnt)#外接矩形API
dst2=cv.rectangle(src,(x,y),(x+w,y+h),(0,255,0),2)#矩形的绘制,起点、以及长宽的指定
cv.imshow("boundingRect",dst2)

(x,y),radius=cv.minEnclosingCircle(cnt)#外接圆API
center=(int(x),int(y))
radius=int(radius)
dst3=cv.circle(src,center,radius,(0,255,0),2)
cv.imshow("boundigCirclet",dst3)

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值