【opencv练习31 - 模板匹配】
2016-09-09 07:58
429 查看
/******************************************************* 测试程序【模版匹配】 时间:2016年9月3日 //参数 输入I ,模板T , 结果 R ,匹配方法 matchTemplate( img, templ, result, match_method ); normalize( result, result, 0, 1, NORM_MINMAX, -1, Mat() ); ********************************************************/ //【全局变量】 Mat img; Mat templ; Mat result; const char* image_window = "Source Image"; const char* result_window = "Result window"; int match_method; int max_Trackbar = 5; void MatchingMethod( int, void* ); int main(void) { img = imread("lab.jpg", 1 ); templ = imread("juice.jpg", 1 ); namedWindow( image_window, WINDOW_AUTOSIZE ); namedWindow( result_window, WINDOW_AUTOSIZE ); const char* trackbar_label = "Method: \n 0: SQDIFF \n 1: SQDIFF NORMED \n 2: TM CCORR \n 3: TM CCORR NORMED \n 4: TM COEFF \n 5: TM COEFF NORMED"; createTrackbar( trackbar_label, image_window, &match_method, max_Trackbar, MatchingMethod ); MatchingMethod( 0, 0 ); waitKey(0); return 0; } void MatchingMethod( int, void* ) { //【1、源图片,待显示】 Mat img_display; img.copyTo( img_display ); //【2、创建结果矩阵】 int result_cols = img.cols - templ.cols + 1; int result_rows = img.rows - templ.rows + 1; result.create( result_cols, result_rows, CV_32FC1 ); //【3、匹配&归一化】 //参数 输入I ,模板T , 结果 R ,匹配方法 matchTemplate( img, templ, result, match_method ); normalize( result, result, 0, 1, NORM_MINMAX, -1, Mat() ); //【定位最佳匹配】 double minVal; double maxVal; Point minLoc; Point maxLoc; Point matchLoc; minMaxLoc( result, &minVal, &maxVal, &minLoc, &maxLoc, Mat() ); // 【CV_TM_SQDIFF 平方差匹配】:用平方差来进行匹配; //最好的匹配值为0;匹配越差,匹配值越大。 // 【CV_TM_CCORR 相关匹配】 :采用乘法操作;数值越大表明匹配越好。 // 【CV_TM_CCOEFF 】 :相关系数匹配:1完美匹配;-1最差匹配。 // 【CV_TM_SQDIFF_NORMED 】 :归一化平方差匹配法 // 【CV_TM_CCORR_NORMED 】 :归一化相关匹配法 // 【CV_TM_CCOEFF_NORMED 】 :归一化相关系数匹配法 //【对于,平方差匹配,相关匹配 越低越好】 //【其他的,越高越好 】 if( match_method == CV_TM_SQDIFF || match_method == CV_TM_SQDIFF_NORMED ) { matchLoc = minLoc; } else { matchLoc = maxLoc; } //MAX // Show rectangle( img_display, matchLoc, Point( matchLoc.x + templ.cols , matchLoc.y + templ.rows ), Scalar::all(0), 2, 8, 0 ); rectangle( result, matchLoc, Point( matchLoc.x + templ.cols , matchLoc.y + templ.rows ), Scalar::all(0), 2, 8, 0 ); imshow( image_window, img_display ); imshow( result_window, result ); return; }
相关文章推荐
- opencv-模板匹配
- Atitit opencv模板匹配attilax总结
- opencv学习: 模板匹配函数matchTemplate
- Java+opencv3.2.0实现模板匹配
- ROS_OpenCV2_MatchTemplate模板匹配
- 模板匹配opencv
- Opencv Python版学习笔记(三)模板匹配
- OpenCV模板匹配算法详解
- opencv 模板匹配与滑动窗口(单匹配) (多匹配)
- OpenCV 学习笔记(模板匹配)
- opencv(31)---SIFT特征匹配
- OpenCV学习笔记[4]模板匹配
- opencv关于模板匹配cvMatchTemplate的运用
- opencv学习_11 (模板匹配(包括单模板和多模板))
- OpenCV里的模板匹配(转载)
- Opencv模板匹配matchTemplate
- OpenCV中的模板匹配方法及其应用
- opencv 模板匹配(cvMatchTemplate)
- OpenCV模板匹配函数:matchTemplate()介绍