C++ OpenCV图像的矩

概述

图像识别的一个核心问题是图像的特征提取,简单描述即为用一组简单的数据(数据描述量)来描述整个图像,这组数据月简单越有代表性越好。良好的特征不受光线、噪点、几何形变的干扰,图像识别技术的发展中,不断有新的描述图像特征提出,而图像不变矩就是其中一个。

从图像中计算出来的矩通常描述了图像不同种类的几何特征如:大小、灰度、方向、形状等,图像矩广泛应用于模式识别、目标分类、目标识别与防伪估计、图像编码与重构等领域。

OpenCV中的矩主要包括以下几种:空间矩,中心矩和中心归一化矩。

相关API

cv::moments (   InputArray  array,
               bool    binaryImage = false
           )   
  • array:输入数组,可以是光栅图像(单通道,8-bit或浮点型二维数组),或者是一个二维数组(1 X N或N X 1),二维数组类型为Point或Point2f
  • binaryImage:默认值是false,如果为true,则所有非零的像素都会按值1对待,也就是说相当于对图像进行了二值化处理,阈值为1,此参数仅对图像有效。

contourArea()

该函数使用Green formula计算轮廓面积,返回面积和非零像素数量如果使用drawContours或fillPoly绘制轮廓,可能导致不同。

double cv::contourArea  (   InputArray  contour,
                           bool    oriented = false
                       )       
  • contour:是一个向量,二维点,可以是vector或Mat类型
  • oriented:有默认值false,面向区域标识符,如果为true,该函数返回一个带符号的面积,其正负取决于轮廓的方向(顺时针还是逆时针)。根据这个特性可以根据面积的符号来确定轮廓的位置。如果是默认值false,则面积以绝对值的形式返回.

arcLength()

用于计算封闭轮廓的周长或曲线的长度

double cv::arcLength    (   InputArray  curve,
                           bool    closed
                           )
  • curve:输入二维点集,可以是vector或Mat类型
  • closed:曲线是否封闭的标志位,true则封闭否则不封闭

代码演示

新建一个项目opencv-0026,配置属性(VS2017配置OpenCV通用属性),然后在源文件写入#include和main方法

核心代码

实现步骤:

  1. 变为灰度图
  2. 高斯模糊
  3. 边缘检测
  4. 轮廓提取
  5. 计算图像矩
  6. 计算图像的质心
  7. 绘制轮廓和质心
  8. 显示图像

运行效果

其中命令行里面显示每个轮廓的面积和周长,右边的画的轮廓里面还有每个轮廓的质心


-END-

本文分享自微信公众号 - 微卡智享(VaccaeShare)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-05-24

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏侯哥的Python分享

python数据库-MySQL数据库的增删改查基本操作(49)

整数: tinyint、smallint、mediumint、int、bigint 浮点数: float、double、real、decimal 日期和时间: ...

6130
来自专栏苦逼的码农

据说这是世界上最漂亮的排序算法,了解一下

在《算法导论》第二版第 7 章(快速排序)的思考题(第 95 页)中提及到一种 低效的递归排序算法:Stooge 排序, Howard、Fine 等教授将这个算...

10420
来自专栏不想当开发的产品不是好测试

source命令

source命令,之前一直用来加载环境变量的,source一下然后执行某个sh,使其环境变量生效,但对细节没有追究;

22130
来自专栏python学习教程

自学Python要多久?Python学到什么程度可以找到好工作

Python现在非常火,语法简单而且功能强大,很多同学都想学Python!所以小的给各位看官们准备了高价值Python学习视频教程及相关电子版书籍,欢迎前来领取...

23420
来自专栏侯哥的Python分享

python算法与数据结构-二叉树的代码实现(46)

  上一篇我们对数据结构中常用的树做了介绍,本篇博客主要以二叉树为例,讲解一下树的数据结构和代码实现。回顾二叉树:二叉树是每个节点最多有两个子树的树结构。通常子...

13450
来自专栏搜狗测试

你选择合适的git workflow了吗?

备注:示例图参考rubygarage.org,项目二中dev,beta,release分支分别对应图中的development,release, maste...

9720
来自专栏深度学习与python

Python3中的字符串处理小技巧

python编程虽然有很多库函数可以使用,但是掌握一些必要的编程技巧也是非常重要的,如果你熟练使用诸如引用计数、类型检查、数据操作、使用堆栈、管理变量、消除列表...

14240
来自专栏苦逼的码农

动态规划之正则表达式

之前的文章 动态规划详解 收到了普遍的好评,今天写一个动态规划的经典应用:正则表达式。如果有读者对「动态规划」还不了解,建议先看一下上面那篇文章。

17530
来自专栏磐创AI技术团队的专栏

怎样设计最优的卷积神经网络架构?| NAS原理剖析

虽然,深度学习在近几年发展迅速。但是,关于如何才能设计出最优的卷积神经网络架构这个问题仍在处于探索阶段。

14720
来自专栏磐创AI技术团队的专栏

一文彻底搞懂BP算法:原理推导+数据演示+项目实战(下篇)

鸢尾花数据集如图2所示,总共有三个品种的鸢尾花(setosa、versicolor和virginica),每个类别50条样本数据,每个样本有四个特征(花萼长度、...

15030

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励