OpenCV学习之路(九)轮廓详解

有的人可能会问,轮廓跟边缘有什么区别,不都是把物体的边缘画出来吗。实际上是不一样的,边缘一般是不连续的,而轮廓则是把边缘连接成了一个整体。

cv2.findContours()

这个函数是用来查找图像的轮廓,并且返回几个值。其构造函数如下:

image,contours,hierarchy=cv2.findContours(img,mode,method) 

参数解释:

  • image:修改后的原图像
  • contours:是一个列表,储存图像中的所有轮廓,包含对象边界点坐标(x,y)
  • hierarchy:图像的轮廓层次
  • img:待处理图像,必须是二值化图片,并且要注意,对象必须是白色,背景是黑色。
  • mode:轮廓检索模式:
    • cv2.RETR_EXTERNAL:表示只检测外轮廓
    • cv2.RETR_LIST:检测的轮廓不建立等级关系
    • cv2.RETR_CCOMP:建立两个等级的轮廓,上面的一层为外边界,里面的一层为内孔的边界信息。如国内筒内还有一个连通物体,这个物体的边界也在顶层
    • cv2.RETR_TREE:建立一个等级树结构的轮廓
  • method:轮廓的近似方法:
    • cv2.CHAIN_APPROX_NONE:存储所有的轮廓点,相邻两个点的像素位置差不超过1
    • cv2. cv2.CHAIN_APPROX_SIMPLE:简化保存,比如矩形轮廓就只保存四个顶点的轮廓点。
    • cv2.CHAIN_APPROX_TC89_L1:使用teh-Chinl chain近似算法
    • cv2.CHAIN_APPROX_——TC89_KCOS:使用teh-Chinl chain近似算法

cv2.drawContours()

这个函数是用来把找到的轮廓画在原图上的,其构造函数如下:

 image=cv2.drawContours(img,contours,contourldx,color,thickness)

参数解释:

  • img:原图
  • contours:findContou函数的第二个返回值
  • contourldx:需要绘制的边缘索引,如果是-1就全部绘制。
  • color:绘制的颜色,BGR格式的Scalar
  • thickness:绘制轮廓时的画笔粗细
例子
import numpy as np
import cv2
img=cv2.imread('D://zopencv//contours.png')
imgcopy=img.copy()
imgray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret,img_thre=cv2.threshold(imgray,127,255,cv2.THRESH_BINARY)
image,contours,hierarchy=cv2.findContours(img_thre,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
mask1=cv2.drawContours(imgcopy,contours,-1,(0,0,255),2)
cv2.imshow('mask1',mask1)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值