工业图像处理实战--粗定位

粗定位,又称简单模板匹配,是一种在工业图像处理上最常见的方法。该方法精确度高,识别时间短。

他的一个最大的好处就是能够在目标位置不确定的情况下,粗略的定位目标。因此该方法多使用于背景复杂、目标位置不固定、但检测目标清晰的情况下。

在这里主要以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,然后就能更加精确的去做精确定位。

你可能感兴趣的:(工业图像处理入门)