- Mat imgMat = imread("fish.png", IMREAD_GRAYSCALE); // 原图
- Mat m1 = imread("fish_single.png", IMREAD_GRAYSCALE); // 模板图
- Mat m2;
- Mat m3;
- Mat canny_out;
- imshow("m1", m1);
- matchTemplate(imgMat, m1, m2, TM_CCOEFF_NORMED );
- imshow("m2", m2);
- double minVal;
- double maxVal;
- Point minLoc;
- Point maxLoc;
- minMaxLoc(m2, &minVal, &maxVal, &minLoc, &maxLoc); // 提取极值
- imgMat.copyTo(m3);
- rectangle(m3, Point(maxLoc), Point(maxLoc.x + m1.cols, maxLoc.y + m1.rows),
- Scalar(0, 0, 255), 3); // 绘制得分最高结果的矩形边界
- imshow("m3", m3);
- // 给所有阈值大于 0.8 的结果绘制矩形
- float threshold = 0.8;
- for(int row = 0; row <m2.rows; row++)
- {
- for (int col = 0;col < m2.cols; col++ )
- {
- // Mat.at<float>(i, j) 返回对应 float 值
- float value = m2.at<float>(row, col);
- if(value> threshold)
- rectangle(imgMat, Point(col, row), Point(col + m1.cols, row + m1.rows),
- Scalar(0, 0, 255));
- }
- }
- imshow("imgMat", imgMat);
原图
模板
m1
m2
m3
imgMat
来源: http://www.bubuko.com/infodetail-3810747.html