您好,登录后才能下订单哦!
这篇文章主要介绍了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方法
核心代码
实现步骤:
变为灰度图
高斯模糊
边缘检测
轮廓提取
计算图像矩
计算图像的质心
绘制轮廓和质心
显示图像
运行效果
其中命令行里面显示每个轮廓的面积和周长,右边的画的轮廓里面还有每个轮廓的质心
感谢你能够认真阅读完这篇文章,希望小编分享的“C++如何实现OpenCV图像的矩”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。