与 python-openCv 匹配的简单模板

Posted

技术标签:

【中文标题】与 python-openCv 匹配的简单模板【英文标题】:Simple template matching with python-openCv 【发布时间】:2015-11-25 15:03:39 【问题描述】:

我正在尝试在图像中检测一些简单的“红色图案”。这是我遵循的算法: 1)过滤掉所有其他颜色而不是“红色”并创建黑白图像。我使用带有适当遮罩的“cvtColor”,然后应用“GaussianBlur”来减少噪音。到目前为止一切都很好。

2) 我使用如下函数“matchTemplate”来检测图像中的“箭头”模板。

问题:当'箭头'模板在照片中时,它被正确检测到。 但是当它不在照片中时,算法会检测到其他一些错误的形状。 有人可以修改代码,以便当箭头模板不在图片中时,什么都不会被检测到。 这是我的代码:

    template = cv2.imread(address,0)
    w, h = template.shape[::-1]
    res = cv2.matchTemplate(self.image['blured'], template, cv2.TM_CCOEFF_NORMED)
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
    top_left = max_loc
    bottom_right = (top_left[0] + w, top_left[1] + h)
    cv2.rectangle(self.image['blured'],top_left, bottom_right, 255, 2)
    cv2.rectangle(self.image['normal'], top_left, bottom_right, 255,2)

结果如下:

错误检测:

我的模板图像,我完全从主照片中裁剪出来的:

谁能发现我的错误?我是图像处理的新手。提前致谢。

【问题讨论】:

【参考方案1】:

您必须查看您的max_val 并为其设置阈值。

假设图像包含箭头时max_valx1,图像不包含箭头时为x2,则应该是x1 > x2。作为第一个暂定值,您可以选择threshold=(x1+x2)/2,然后如果max_val > threshold,则在图像中找到图案,否则找不到图案。

原因是matchTemplate

滑过image,比较大小为w的重叠块 \times hagainst templ 使用指定的方法并存储 比较结果在result

因此,无论图像中是否存在箭头,您的图像 res 将始终具有最大值。

【讨论】:

【参考方案2】:

非常感谢亚历山德罗·雅各普森。 我修改了代码并以这种方式解决了问题。这几乎是你提出的:

        template = cv2.imread(address,0)
        w, h = template.shape[::-1]
        res = cv2.matchTemplate(self.image['blured'], template,cv2.TM_CCOEFF_NORMED)
        threshold = 0.9
        loc = np.where( res >= threshold)
        for pt in zip(*loc[::-1]):
           cv2.rectangle(self.image['blured'], pt, (pt[0] + w, pt[1] + h), (0,0,255), 2)
           cv2.rectangle(self.image['normal'], pt, (pt[0] + w, pt[1] + h), (0,0,255), 2)

以这种方式检测模式非常准确。 新问题:它对方向和旋转很敏感。如果它被旋转,它不会检测到图案。例如大约 45 度。 有没有我可以设置的参数,并让算法找到模式,尽管它是旋转或缩放的?

【讨论】:

对于 新问题,您应该提出一个新问题...无论如何,我认为这将与 ***.com/questions/10666436/… 重复,所以请在提出新问题之前问题,阅读答案。

以上是关于与 python-openCv 匹配的简单模板的主要内容,如果未能解决你的问题,请参考以下文章

python-opencv程序运行时遇到一个问题,求助

python-openCV 绘制图形

Django之 模板

python-opencv实现简单的车牌定位

python-opencv-图像的融合

OpenCV基础之模板匹配与直方图