Kar*_*hik 6 opencv colors image-processing template-matching
我正在评估模板匹配算法来区分相似和不相似的对象。我发现令人困惑的是,我的印象是模板匹配是一种比较原始像素强度值的方法。因此,当像素值变化时,我预计模板匹配会给出较低的匹配百分比。
我有一个模板和搜索图像,其形状和大小相同,仅颜色不同(附图)。当我进行模板匹配时,令人惊讶的是我得到的匹配百分比大于 90%。
img = cv2.imread('./images/searchtest.png', cv2.IMREAD_COLOR)
template = cv2.imread('./images/template.png', cv2.IMREAD_COLOR)
res = cv2.matchTemplate(img, template, cv2.TM_CCORR_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
print(max_val)
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我为什么会这样吗?我什至在 HSV 色彩空间、完整 BGR 图像、完整 HSV 图像、B、G、R 的单独通道和 H、S、V 的单独通道中尝试过此操作。在所有情况下,我都获得了不错的百分比。
任何帮助都将非常感激。
小智 2
res = cv2.matchTemplate(img, template, cv2.TM_CCORR_NORMED)
Run Code Online (Sandbox Code Playgroud)
有各种参数,您可以使用它们来查找模板,例如cv2.TM_CCOEFF, cv2.TM_CCOEFF_NORMED, cv2.TM_CCORR, cv2.TM_CCORR_NORMED, cv2.TM_SQDIFF,cv2.TM_SQDIFF_NORMED
你可以在这里查看他们的等式:
https://docs.opencv.org/2.4/modules/imgproc/doc/object_detection.html
我认为如果您想使用模板匹配以使其不匹配不同颜色的形状,那么您应该使用 CV_TM_SQDIFF 或 cv2.TM_CCOEFF_NORMED。相关项给出最大值的匹配,平方差项给出最小值的匹配。因此,如果您具有精确的形状和大小,但颜色不同,您将获得较高的相关性值(请参阅上面链接中的方程式)。