专栏首页风吹杨柳opencv 9 -- 轮廓 特征 一

opencv 9 -- 轮廓 特征 一

查找轮廓的不同特征,例如面积,周长,重心,边界框

1 矩

图像的矩可以帮助我们计算图像的质心,面积等

函数 cv2.moments() 会将计算得到的矩以一个字典的形式返回

cnt = contours[0]
M = cv2.moments(cnt) print M

结果:

{'mu02': 185.57864792644978, 
 'mu03': -96.2852087020874, 
 'm11': 1624279.2083333333, 
 'nu02': 0.1077536059959064, 
 'nu20': 0.11998893138723407,
 'm30': 23403716.05, 
 'nu21': 0.015200089449869787, 
 'mu12': -131.628704666673, 
 'nu11': 0.03254640471211304, 
 'nu12': -0.011863978902607857, 
 'm03': 4421663080.0, 
 'm00': 41.5, 
 'mu30': 255.25263517722487,
 'm10': 3426.1666666666665, 
 'm20': 283064.9166666666, 
 'm21': 134200383.33333333}

根据这些矩的值,我们可以计算出对象的重心:

cx = int(M['m10']/M['m00'])
cy = int(M['m01']/M['m00'])

2 轮廓面积

轮廓的面积可以使用函数 cv2.contourArea() 计算得到, 也可以使用矩 (0 阶矩),M[‘m00’]

area = cv2.contourArea(cnt)

3 轮廓周长

也被称为弧长。可以使用函数 cv2.arcLength() 计算得到。 这个函数 的第二参数可以用来指定对象的形状是闭合的(True),还是打开的(一条曲线)

perimeter = cv2.arcLength(cnt,True)

4 轮廓近似

将轮廓形状近似到另外一种由更少点组成的轮廓形状,新轮廓的点的数目 由我们设定的准确度来决定。使用的Douglas-Peucker算法

为了帮助理解,假设我们要在一幅图像中查找一个矩形, 但是由于图像的 种种原因,我们不能得到一个完美的矩形, 而是一个“坏形状”(如下图第一幅所示)。

现在你就可以使用这个函数来近似这个形状()了。 这个函数的第二个参数叫 epsilon,它是从原始轮廓到近似轮廓的最大距离。 它是一个准确度参数。 选择一个好的 epsilon 对于得到满意结果非常重要

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

下边,第二幅图中的绿线是当 epsilon = 10% 时得到的近似轮廓, 第三幅 图是当 epsilon = 1% 时得到的近似轮廓。 第三个参数设定弧线是否闭合

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • opencv 9 -- 轮廓 层次结构

    使用函数 cv2.findContours 来查找轮廓, 我们需要传入一个参数:轮廓提取模式(Contour_Retrieval_Mode)。 我们总是...

    wust小吴
  • opencv 9 -- 轮廓 其他操作

    OpenCV 中有一个函数 cv.convexityDefect() 可以帮助我们找到凸缺陷。

    wust小吴
  • opencv 9 -- 轮廓 性质

    wust小吴
  • OpenCV玩九宫格数独(一):九宫格图片中提取数字

    在一年之前,我曾用 C++ 尝试过 opencv 解数独,但由于当时水平有限,未能完成。最近我打算改用 Python 来完成。本文先说第一步,图片中数字的提取。

    刘潇龙
  • C++读取文件内容

    gojam
  • 让安全攻城狮增值的五大职业技能

    网络安全攻城狮并非单纯的码农,他们需要的不仅是技术,还有安全以及相关行业的知识,因此Python、Hadoop、MongoDB以及其他一些大数据分析工具就派上了...

    FB客服
  • 记一次数据库重启后归档急剧增加的问题(98天)

    在本地的环境中测试外部表的性能,由于空间有限,不一会儿归档的空间就爆了。然后文件貌似出现了系统级的问题,刚刚rm掉的归档日志文件。隔了几秒钟再ls,就出现了。怎...

    jeanron100
  • Python中的第三方库管理与虚拟环境#学习猿地

    > pip就是python的包管理工具,解决了包直接的依赖关系。可以方便的管理第三方库(包).

    学习猿地
  • 宇智波程序笔记10-为什么你使用的 Spring Security OAuth 过期了

    那么到底选择哪一个依赖合适呢?这不同的依赖又有什么区别?今天松哥就来和大家聊一聊 Spring Security 中关于 OAuth2 的恩怨。

    不会飞的小鸟
  • Python中的第三方库管理与虚拟环境#学习猿地

    > pip就是python的包管理工具,解决了包直接的依赖关系。可以方便的管理第三方库(包).

    学习猿地

扫码关注云+社区

领取腾讯云代金券