(一)知识点
①轮廓匹配主要基于Hu矩的特性(放缩不变性,旋转不变性)
图像的矩特征 - ☆Ronny丶 - 博客园 (cnblogs.com)
②具体方法
(二)API
① moments()【计算几何矩】
Moments moments( InputArray array, bool binaryImage = false );
参数解释(OpenCV: Structural Analysis and Shape Descriptors
binaryImage:如果为 true,则所有非零图像像素都被视为 1。该参数仅用于图像。其实就相当于一个二值化了,只不过阈值为无限接近0但不等于0
moments()返回Moments类
②HuMoments()【计算Hu矩】
void HuMoments( const Moments& moments, double hu[7] );//主要是计算7个Hu(图像不变性,第7个除外,会应反射而改变)
void HuMoments( const Moments& m, OutputArray hu );//参二输出一个Mat类的Hu
这是一个重载的成员函数,为方便起见而提供。它与上述函数的不同之处仅在于它接受的参数。
OpenCV: Structural Analysis and Shape Descriptors
③matchShapes()【基于轮廓Hu的匹配计算】
double matchShapes( InputArray contour1, InputArray contour2, int method, double parameter );
参数结束:
InputArray contour1:可以是Mat类的轮廓1(但是用轮廓1的Hu值更准确)
InputArray contour2:可以是Mat类的轮廓2(但是用轮廓2的Hu值更准确)
int method:计算两轮廓(两轮廓Hu值的方式)见下图
(三)代码展示
(四)运行效果