☆ 十五天掌握OpenCV——轮廓特征

魏老师学生——Cecil:学习OpenCV-机器视觉之旅


轮廓特征:面积、周长、重心、边界框。

  1. 作用:计算图像的质心、面积。
  2. cv2.moments() ——解释:将计算得到的矩以一个字典的形式返回。
  3. cv2.contourArea() ——解释:求轮廓面积。
  4. cv2.arcLength() ——解释:求轮廓周长,第二参数 True闭合 False张开
  5. cv2.approxPolyDP(轮廓图,epsilon,True) ——解释:近似目标形状。第二参数决定效果。
  6. cv2.convexHull(points[,hull[,clockwise[,returnPoints]]]) ——解释:检测曲线是否具有凸性缺陷,并纠正缺陷,1、传入轮廓; 2、输出; 3、方向标志; True为顺时针; 4、返回与凸包点对应轮廓上点。False可得到凸性缺陷。
  7. cv2.isContourConvex() ——解释:检测曲线是否凸。
  8. x,y,w,h=cv2.boundingRect() ——解释:直边界矩形。xy为矩形左上角坐标,wh为矩形宽高。面积不是最小。
  9. cv2.minAreaRect() ——解释:旋转边界矩形。面积最小。考虑对象旋转。返回Box2D结构。
  10. cv2.minEnclosingCircle() ——解释:最小外切圆。
  11. cv2.ellipse() ——解释:椭圆拟合。返回值为旋转边界矩形的内切圆。
  12. 直线拟合:根据一组点拟合出一条直线,同时为图像中的白色点拟合出一条直线。

代码演示

#coding=utf8
import cv2
import numpy as np
img=cv2.imread('juzi.jpg',0)
ret,thresh=cv2.threshold(img,127,255,0)
contours,hierarchy=cv2.findContours(thresh,1,2)
cnt=contours[0]
M=cv2.moments(cnt)
print(M)

cx=int(M['m10']/M['m00']) #求重心
cy=int(M['m01']/M['m00'])

area=cv2.contourArea(cnt)

perimeter=cv2.arcLength(cnt,True)

epsilon=0.1*cv2.arcLength(cnt,True)
approx=cv2.approxPolyDP(cnt,epsilon,True)

hull=cv2.convexHull(cnt)

k=cv2.isContourConvex(cnt)

x,y,w,h=cv2.boundingRect(cnt)
img=cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)

(x,y),radius=cv2.minEnclosingCircle(cnt)
center=(int(x),int(y))
radius=int(radius)
img=cv2.circle(img,center,radius,(0,255,0),2)

ellipse=cv2.fitEllipse(cnt) #椭圆拟合
im=cv2.ellipse(im,ellispe,(0,255,0),2)

rows,cols=img.shape[:2]
[vx,vy,x,y]=cv2.fitLine(cnt,cv2.DIST_L2,0,0.01,0.01)
lefty=int((-x*vy/vx)+y)
righty=int((cols-x)*vy/vx+y)
img=cv2.line(img,(cols-1,righty),(0,lefty),(0,255,0),2)
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值