点集模板匹配
篇一:模板匹配
opencv学习_11 (模板匹配(包括单模板和多模板))
分类:Opencv学习笔记2013-11-08 21:167663人阅读评论(6)收藏举报
模板匹配源码opencv
模板匹配——在一幅图像中匹配与模板相似的单个或者多个目标
(1)目标匹配函数:
cvMatchT emplate( const CvArr* image, constCvArr* templ,
CvArr* result,int method );
Image 待搜索图像
T empl 模板图像
Result 匹配结果用来存放通过以下方法计算出滑动窗口与模板的相似值
Method 计算匹配程度的方法
关于匹配方法,使用不同的方法产生的结果的意义可能不太一样,有些返回的值越大表示匹配程度越好,而有些方法
返回的值越小表示匹配程度越好
关于参数method:
CV_TM_SQDIFF平方差匹配法:该方法采用平方差来进行匹配;最好的匹配值为0;匹配越差,匹配值越大。
CV_TM_CCORR相关匹配法:该方法采用乘法操作;数值越大表明匹配程度越好。CV_TM_CCOEFF相关系数匹配法:1表示完美的匹配;-1表示最差的匹配。CV_TM_SQDIFF_NORMED归一化平方差匹配法
CV_TM_CCORR_NORMED归一化相关匹配法
CV_TM_CCOEFF_NORMED归一化相关系数匹配法
(2):接着就是要最值以及最值对应的坐标
cvMinMaxLoc()寻一个矩阵中最大最小值以及相应的坐标
cvMinMaxLoc( constCvArr* arr, double* min_val, double* max_val,
CvPoint* min_locCV_DEFAULT(NULL),
CvPoint* max_locCV_DEFAULT(NULL),
const CvArr* mask CV_DEFAULT(NULL) );
单目标匹配结果:
代码:
[cpp] view plaincopyprint?
1. #include <iostream
2. #include cv.h
3. #include cxcore.h
4. #include highgui.h
5. using namespace std;
6. int main()
7. {
8. IplImage *src =
cvLoadImage(E:\\study_opencv_video\\lesson16_1\\images\\s rc.jpg, 0);
9. IplImage *srcResult =
cvLoadImage(E:\\study_opencv_video\\lesson16_1\\images\\s rc.jpg, 3); //用来显示
10. IplImage *templat =
cvLoadImage(E:\\study_opencv_video\\lesson16_1\\images\\t emplate.png, 0);
11. IplImage *result;
12. if(!src || !templat)
13. {
14. cout << 打开图像失败<< endl;
15. return 0;
16. }
17. int srcW, srcH, templatW, templatH, resultH, resultW;
18. srcW = src-width;
19. srcH = src-height;
20. templatW = templat-width;
21. templatH = templat-height;
22. if(srcW < templatW || srcH < templatH)
23. {
24. cout <<;模板不能比原图像小<< endl;
25. return 0;
26. }
27. resultW = srcW - templatW + 1;
28. resultH = srcH - templatH + 1;
29. result = cvCreateImage(cvSize(resultW, resultH), 32, 1);
30. cvMatchT emplate(src, templat, result, CV_TM_SQDIFF);
31. double minValue, maxValue;
32. CvPoint minLoc, maxLoc;
33. cvMinMaxLoc(result, &minValue, &maxValue, &minLoc, &maxLoc);
34. cvRectangle(srcResult, minLoc, cvPoint(minLoc.x + templatW, minLoc.y+
templatH), cvScalar(0,0,255));
35. cvNamedWindow(srcResult, 0);
36. cvNamedWindow(templat, 0);
37. cvShowImage(srcResult, srcResult);
38. cvShowImage(templat, templat);
39. cvWaitKey(0);
40. cvReleaseImage(&result);
41. cvReleaseImage(&templat);
42. cvReleaseImage(&srcResult);
43. cvReleaseImage(&src);
44. return 0;
rectangle函数opencv
45. }
(3)多目标匹配:
结果:
代码:
[cpp] view plaincopyprint?
1. #include <iostream
2. #include cv.h
3. #include cxcore.h
4. #include highgui.h

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。