只用來記錄學習筆記
匹配算法:
Mat src, temp,dst;
int match_method = CV_TM_SQDIFF;
int max_track = 5;
const char* input_title = "input";
const char* output_title = "output";
const char* match_title = "template match-demo";
void Match_Demo(int, void*);
int main(int argc, char** argv) {
src = imread("C:/Users/Administrator/Pictures/d503.jpg");//源圖像
temp = imread("C:/Users/Administrator/Pictures/d503_s.jpg");//模板圖像
if (src.empty()|| temp.empty()) {
cout << "no image" << endl;
return -1;
}
namedWindow(input_title, CV_WINDOW_AUTOSIZE);
namedWindow(output_title, CV_WINDOW_AUTOSIZE);
namedWindow(match_title, CV_WINDOW_AUTOSIZE);
imshow(input_title, src);
const char* trackbar_title = "Match Algo Type";//定義滑塊的名稱
createTrackbar(trackbar_title, output_title, &match_method, max_track, Match_Demo);//通過滑塊改變匹配算法
Match_Demo(0, 0);
waitKey(0);
return 0;
}
void Match_Demo(int, void*) {
int width = src.cols - temp.cols + 1;//定義寬 matchTemplate規定要這麼定義的
int height = src.rows - temp.rows + 1;//定義高 matchTemplate規定要這麼定義的
Mat result(width, height, CV_32FC1); //新建result,matchTemplate規定只能單通道32位浮點數
matchTemplate(src, temp, result,match_method);//匹配算法
// src:源圖像,必須是8-bit或者32-bit浮點數圖像
// temp:模板圖像,類型與輸入圖像一致
//result: 輸出結果,必須是單通道32位浮點數,假設源圖像WxH,模板圖像wxh,則結果必須爲W - w + 1, H - h + 1的大小。
//match_method:使用的匹配方法
//InputArray mask = noArray():(optional)可以不寫,也可以寫成Mat()
normalize(result,result,0,1,NORM_MINMAX,-1,Mat()); //將result歸一化爲0-1
Point minLoc;
Point maxLoc;
double min, max;
src.copyTo(dst); //複製,src複製給dst
Point temLoc;
minMaxLoc(result, &min, &max, &minLoc, &maxLoc, Mat());//在一個數組中找到全局最小值和全局最大值
//result:輸入圖像。
//&min:最小值,可輸入NULL表示不需要。
//&max :最大值,可輸入NULL表示不需要。
//&minLoc:最小值的位置,可輸入NULL表示不需要,Point類型。
//&maxLoc:最大值的位置,可輸入NULL表示不需要,Point類型。
//mask:可有可無的掩模。
if (match_method == CV_TM_SQDIFF || match_method == CV_TM_SQDIFF_NORMED) {
temLoc = minLoc;
}
else {
temLoc = maxLoc;
}
//繪製矩形
rectangle(dst, Rect(temLoc.x, temLoc.y, temp.cols, temp.rows), Scalar(0, 0, 255), 2, 8);
rectangle(result, Rect(temLoc.x, temLoc.y, temp.cols, temp.rows), Scalar(0, 0, 255), 2, 8);
imshow(output_title, result);
imshow(match_title, dst);
}
效果圖: