http://blog.csdn.net/abc8730866/article/details/69219992
轮廓特征属性及应用(七)—位置关系及轮廓匹配
1.计算点与轮廓的距离及位置关系——pointPolygonTest()
2.矩的计算——moments()
3.形状匹配(比较两个形状或轮廓间的相似度)——matchShapes()
先上ppt:
代码:1.计算点到轮廓的距离与位置关系
运行结果:
代码:2.轮廓矩的计算
运行结果:
代码:3.形状匹配---比较两个形状或轮廓间的相似度
运行结果:
http://blog.csdn.net/zt271675484/article/details/21305893
1 普通局
2 中心距:平移不变性
3 归一化中心距:缩放不变性
4 hu矩:旋转不变性
iplImage* img=cvload("xxxxx");
//计算普通局和中心距
CvMoments moment;
cvMoments(img,&moment,2);//第三个参数:>0 0/1组成图像
//计算hu矩
CVHuMoments humoment;
cvGetHuMoments(&moment,&humoment);
图像1---》hu矩
图像2---》hu矩
通过比较 图像1和2 的hu矩 --- 值越小 相似度就越大。
OPencv 比较hu矩的函数(已经封装的上述的运算)
CvSeq* contours1=通过函数获取img的轮廓 指针。
CvSeq* contours1=通过函数获取img的轮廓 指针。
double result=cvMatchShapes(contours1,contours2,1);//第三个参数 为比较的方式。 输出比较的相似度浮点值。
#include "cv.h" #include "cxcore.h" #include "highgui.h" #include <iostream> #include "function.h" int MatchContour( int argc, char ** argv) { IplImage *Src1=cvLoadImage( "e:\\picture\\jiantou.jpg" ,0); IplImage *Src2=cvLoadImage( "e:\\picture\\jiantou2.jpg" ,0); IplImage *BinaryImage1=cvCreateImage(cvGetSize(Src1),Src1->depth,1); IplImage *BinaryImage2=cvCreateImage(cvGetSize(Src2),Src2->depth,1); IplImage *SrcColor1=cvCreateImage(cvGetSize(Src1),Src1->depth,3); IplImage *SrcColor2=cvCreateImage(cvGetSize(Src2),Src2->depth,3); cvThreshold(Src1,BinaryImage1,100,255,CV_THRESH_BINARY); cvThreshold(Src2,BinaryImage2,100,255,CV_THRESH_BINARY); CvMemStorage* storage1=cvCreateMemStorage(0); CvMemStorage* storage2=cvCreateMemStorage(0); CvSeq* ContourSeq1=NULL; CvSeq* ContourSeq2=NULL; cvFindContours(BinaryImage1,storage1,&ContourSeq1, sizeof (CvContour)); cvFindContours(BinaryImage2,storage2,&ContourSeq2, sizeof (CvContour)); cvCvtColor(Src1,SrcColor1,CV_GRAY2BGR); cvCvtColor(Src2,SrcColor2,CV_GRAY2BGR); cvDrawContours( return 0; }
|
【OpenCV学习笔记】三十、轮廓特征属性及应用(七)—位置关系及轮廓匹配
原文:http://www.cnblogs.com/jukan/p/7813065.html