前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++ OpenCV图像的矩

C++ OpenCV图像的矩

作者头像
Vaccae
发布2019-07-24 13:07:38
1.2K0
发布2019-07-24 13:07:38
举报
文章被收录于专栏:微卡智享微卡智享

概述

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

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

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

相关API

代码语言:javascript
复制
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绘制轮廓,可能导致不同。

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

arcLength()

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

代码语言:javascript
复制
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-

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-05-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微卡智享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图像识别
腾讯云图像识别基于深度学习等人工智能技术,提供车辆,物体及场景等检测和识别服务, 已上线产品子功能包含车辆识别,商品识别,宠物识别,文件封识别等,更多功能接口敬请期待。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档