目录

  • 什么是Hu矩
  • 获取Hu矩值
  • 形状匹配

什么是Hu矩

Hu矩是归一化中心矩的线性组合。Hu矩在图像的旋转,缩放,平移等操作后,仍然保持矩的特征不变,所以经常会用到Hu矩来识别图像的特征。

在OpenCV中,我们可以通过cv2.HuMoments()函数获取Hu矩。该函数使用cv2.moments()函数的返回值作为参数,返回7个Hu矩值。

其完整定义如下:

def HuMoments(m, hu=None):

m:是由函数cv2.moments()计算得到的矩特征值

获取Hu矩值

下面,我们就通过该函数获取下图的Hu矩值。

具体代码如下所示:

import cv2img = cv2.imread("24.jpg")
cv2.imshow("img", img)
# 转换为灰度图像
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
hu=cv2.HuMoments(cv2.moments(img_gray)).flatten()
print(hu)

运行之后,我们会得到7个值的list数组:

形状匹配

前面我们已经介绍,通过Hu矩可以判断两个轮廓是否一致。而为了更直观的比较Hu矩值,OpenCV给我们提供了cv2.matchShapes()来对两个对象的Hu矩进行比较。

其完整定义如下:

def matchShapes(contour1, contour2, method, parameter):

contour1:需要对比的轮廓1,或者灰度图像

contour2:需要对比的轮廓2,或者灰度图像

method:比较两个轮廓的Hu矩方法,取值如下表:

取值 含义
cv2.CONTOURS_MATCH_11
cv2.CONTOURS_MATCH_12
cv2.CONTOURS_MATCH_13

parameter:应用于method的特定参数,该参数为扩展参数OpenCV4.X还不支持该参数,因此该参数设置为0。

下面,我们通过几张图测试形状匹配,原图如下:

其中24是之前用到的图与后面图形都不一样,而26所有的图形都是从同一个椭圆变换而来的,比如26_2是26_1等比例放大之后的图像,26_4是26_1移动并旋转一定角度的图像。

下面,我们来通过matchShapes来判断图形,代码如下:

import cv2img1 = cv2.imread("26_1.jpg")
img2 = cv2.imread("26_2.jpg")
img3 = cv2.imread("24.jpg")
img4 = cv2.imread("26_4.jpg")# 转换为灰度图像
gray1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
gray2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
gray3 = cv2.cvtColor(img3, cv2.COLOR_BGR2GRAY)
gray4 = cv2.cvtColor(img4, cv2.COLOR_BGR2GRAY)contours1, hierarchy1 = cv2.findContours(gray1, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
contours2, hierarchy2 = cv2.findContours(gray2, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
contours3, hierarchy3 = cv2.findContours(gray3, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
contours4, hierarchy4 = cv2.findContours(gray4, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)ret1 = cv2.matchShapes(contours1[0], contours2[0], 1, 0.0)
ret2 = cv2.matchShapes(contours1[0], contours3[0], 1, 0.0)
ret3 = cv2.matchShapes(contours1[0], contours4[0], 1, 0.0)
print(ret1)
print(ret2)
print(ret3)

这里26_1与26_2,24,26_4分别对比,控制台输出结果如下:


可以看到,与放大移动旋转的图像比,输出值都是0。这是因为相似的图像通过平移,缩放,旋转后,cv2.matchShapes()的值仍然接近与0。而24图的矩形与椭圆并不是一个轮廓。所以其差别非常大,自然返回值也大。

Hu矩---OpenCV-Python开发指南(26)相关推荐

  1. Python开发指南[1]之程序员计时小时钟(附源码)

    Python开发指南[1]之程序员计时小时钟 程序之美 前言 主体 运行效果 核心代码 逻辑分析 结束语 程序之美 前言 Python作为一门编程语言,这门语言的魅力和影响力已经远超C#.C++等编程 ...

  2. python没有联网_无网环境下的 Python 开发指南

    说起有关 Python 的指南,便一定得提到 K 神创建的『Python最佳实践指南』,英文名字是『The Hitchhiker's Guide to Python!』.毫不夸张地说,K 神创建的指南 ...

  3. 太赞了!Win 平台最佳Python 开发指南!

    入门: 最全的零基础学Python的问题 | 零基础学了8个月的Python | 实战项目 |学Python就是这条捷径 干货:爬取豆瓣短评,电影<后来的我们> | 38年NBA最佳球员分 ...

  4. 【转】Python开发指南:最佳实践精选

    总体原则 价值 "为别人开发你也想要使用的工具." --Kenneth Reitz "简洁总是胜过可用." --Pieter Hintjens "满足 ...

  5. 微软400集python课程-最强福利——来自微软的Python学习教程(开发指南)

    各位小伙伴们,大家有多久没有发现柳猫这么勤奋的更新啦~ 今天给小伙伴们带来微软的官方福利,你没看错,就是来自微软的官方Python学习教程(开发指南)~ 之前微软上线过一套 Python 教程< ...

  6. 微软 python教程_最强福利——来自微软的Python学习教程(开发指南)

    各位小伙伴们,大家有多久没有发现柳猫这么勤奋的更新啦~ 今天给小伙伴们带来微软的官方福利,你没看错,就是来自微软的官方Python学习教程(开发指南)~ 之前微软上线过一套 Python 教程< ...

  7. Opencv:基于Hu-moments(hu矩)的形状匹配

    本文将按照以下目录展开介绍: 什么是图像矩: 如何计算图像矩: 什么是Hu矩: 如何利用Opencv计算一个图像Hu矩: 如何利用Hu-矩来寻找两个形状的相似性: 1. 什么是图像力矩 图像矩是图像像 ...

  8. OpenCV C++案例实战八《基于Hu矩轮廓匹配》

    OpenCV C++案例实战八<基于Hu矩轮廓匹配> 前言 一.查找轮廓 二.计算Hu矩 三.显示效果 四.源码 总结 前言 本文将使用OpenCV C++ 基于Hu矩进行轮廓匹配. 一. ...

  9. python timeit用法_十大Python开发技巧

    Python开发指南, 超级实用足以让您震撼 > Photo by Christina Morillo from StockSnap 时不时地,当我了解Python的新功能时,或者我发现其他一些 ...

最新文章

  1. (C++)自定义链表并写入
  2. 剔除Intellij中Mybatis的Mapper自动注入警告
  3. python零基础实例-Python初学零基础也不怕,从0开始!
  4. 百练OJ:3865和2677:肿瘤检测
  5. Windows下C/C++获取当前系统时间
  6. 关于函数返回值的讨论与总结
  7. 很好的开源项目ranet-uilibrary-olap
  8. js Date 生成某年某月的天数
  9. 阶段3 2.Spring_07.银行转账案例_10 使用动态代理实现事务控制
  10. 从零开始学androidBroadCast广播.四十五.
  11. Proteus的基本使用方法
  12. 华为初面+综合面试(Java技术面
  13. 根据excel列动态创建mysql表,excel动态生成表格数据/EXCEL根据表2数据自动生成表1内容?...
  14. matlab解薛定谔方程,定态薛定谔方程的MATLAB求解(一)
  15. Far planner之 障碍物的图搜索
  16. 解决win10虚拟机和主机不能互相粘贴复制的问题
  17. JAVA学习基础部分
  18. 基于51单片机的信号发生器设计
  19. Vue 和 React 的区别
  20. 中国Linux发展前景怎么样?

热门文章

  1. Android MVP框架学习
  2. [转载]VB网络聊天程序的开发(1)
  3. android如何实现打分功能,Android App中使用RatingBar实现星级打分功能的教程
  4. mysql时间精确到毫秒
  5. 火狐浏览器cookieSwap
  6. IBM SPSS modeler 17 无限使用
  7. HTML标记【标记br和p的使用】!
  8. python图像特征提取进行分割_python实现图片处理和特征提取详解
  9. 轻松淘金开发者杂谈:铺天盖地的调查问卷兼职项目,你做过吗?月入1-300
  10. centos通过storcli64和smartctl定位定位硬盘盘位和盘符的方法