粗定位,又称简单模板匹配,是一种在工业图像处理上最常见的方法。该方法精确度高,识别时间短。
他的一个最大的好处就是能够在目标位置不确定的情况下,粗略的定位目标。因此该方法多使用于背景复杂、目标位置不固定、但检测目标清晰的情况下。
在这里主要以Opencv的方式(cvMatchTemplate)说明。
1.创建模板图像
一般情况下,采用ROI的方式从原图上将模板图像抠出。存成文件的形式,这样在软件下次打开的时候就不需要再去学习。
2.确定定位区域
cvMatchTemplate
Cvnormalize
CvminMaxLoc
具体的代码如下(随手Copy来的,具体的函数定义和使用方法其他人博客里有,我就不多说了)
Mat SrcImg;//原图像
Mat MdoImag;//模板图像
Mat result;//结果
//这部分是有个公式固定好的
int result_cols = img.cols - templ.cols + 1;
int result_rows = img.rows - templ.rows + 1;
result.create(result_cols, result_rows, CV_32FC1);
matchTemplate(img, templ, result, CV_TM_SQDIFF_NORMED);
normalize(result, result, 0, 1, NORM_MINMAX, -1, Mat());
double minVal = -1;
double maxVal;
Point minLoc;
Point maxLoc;
Point matchLoc;
minMaxLoc(result, &minVal, &maxVal, &minLoc, &maxLoc, Mat());
matchLoc = minLoc;
rectangle(img, matchLoc, Point(matchLoc.x + templ.cols, matchLoc.y + templ.rows), Scalar(0, 255, 0), 2, 8, 0);
在这里,我们最终能够得到匹配度和匹配矩形区域,一般情况下可以选取匹配矩形区域的中心点作为一个最佳匹配点。然后控制匹配度的大小用来返回匹配成功还是失败。
3.安装最佳匹配点从新生成检测区域
在得到最佳匹配点之后,我们可以用这个点去做二次ROI,然后就能更加精确的去做精确定位。