OpenCV之图像轮廓

  • 在进行轮廓操作之前,需要先将图片处理成二值化图像

  • 图像轮廓用于图形分析金以及物体的识别与检测

  • 查找轮廓

  • findContours(src,mode,method)

  • 常用的查找轮廓的mode是:RETR_TREE,它的规则是从右到左,从大到小

  • 存储轮廓的method有两种:

  • 一种是CHAIN_APPROX_SIMPLE,只存储物体轮廓的角点信息

  • 另一种是CHAIN_APPROX_NONE,存储物体轮廓的所有信息

  • 绘制轮廓

  • drawContours(image, contours, contourIdx(轮廓的索引), color[, thickness[, lineType[, hierarchy[, maxLevel[, offset]]]]])

  • 在绘制轮廓时,会直接绘制在原图上,所以最好创建一个深拷贝对象进行轮廓绘制

  • 轮廓的面积和周长

  • 面积

  • contourArea(contour)

  • 周长

  • arcLength(curve,closed)

  • curve就是contour,closed是是否闭合的轮廓

  • 多边形逼近

  • 由于绘制轮廓可能过于复杂,所以使用多边形逼近对原始轮廓做一个近似

  • 多边形逼近中的DP算法原理

  • 不断找到多边形最远的点加入多边形,直到最短距离小于阈值

  • approxPolyDP(contour,epsilon,closed)

  • epsilon就是设置的阈值,阈值越小,越接近于原始轮廓

  • 凸包

  • 多边形逼近可以近似物体的轮廓,但是有时候我们相用一个多边形来简化这个轮廓,就可以使用凸包

  • convexHull(contour)

  • 凸包的计算结果

  • 蓝色线条就是凸包的结果,红色是原始轮廓,绿色是多边形逼近

  • 外接矩形

  • 外接矩形分为最小内接矩形和最大外接矩形

  • 最小内接矩形

  • 根据物体的形状(轮廓)的角点得到一个旋转的矩形

  • minAreaRect(contour)得到的是一个元组((x,y),(w,h),r)

  • 需要将minAreaRect的元组转化为轮廓数据,使用api -----boxPoints(元组对象)(此api只能对带有角度的元组对象进行操作)

  • boxPoints的结果可能是一个非整数型的数据,但是drawContours中的contour明确规定只能是int型并且是列表

  • 所以对boxPoints的对象(box)取整并转为int型,np.round(box).astype('int64')

  • 在drawContours的时候一定要[box]列表对象传入contour位置参数,否则程序报错

  • 最大外接矩形

  • boundingRect(contour)得到的是一个元组(x,y,w,h)

  • 根据这个元组,直接使用调用绘制矩形的api ---- rectangle(img,start,end,color)即可

  • 结果

  • 红色是最小内接矩形,绿色是最大外接矩形

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值