我在Python中使用这个OpenCV函数(cv2.matchTemplate)。
我可以使用6种匹配方法。以下是两个例子。
CV_TM_SQDIFF:
CV_TM_SQDIFF_NORMED:
根据文档,总和是在源图像的模板图像和图像补丁中的所有像素上完成的。
在我的模板图片中,我有一个仅包含0 (fully transparent)
和1 (fully opaque)
的Alpha通道。
当我使用cv2.matchTemplate
函数时,我想忽略0 (fully transparent)
的像素。换句话说,对于0 (fully transparent)
的像素,我想将其视为模板和图像补丁之间的完全匹配。对于1 (fully opaque)
的像素,我想进行正常求和。
对于 CV_TM_SQDIFF 和 CV_TM_SQDIFF_NORMED 方法,我认为完全匹配意味着T (template)
和I (Image Patch)
将总和为零(对于特定像素) )。我不确定其他方法。
所以,我对特定(x,y)的R
总和将会变成这样:
R = (normal summation) + .. + 0 + 0 + .. + (normal summation) + 0 + ..
| | |
[These pixels have a alpha channel = 0, the other pixels are 1]
我找到了用C ++编写的source codes of cv2.matchTemplate
function。
cv2.matchTemplate
功能位于第828行。ocl_matchTemplate
功能位于第549行。matchTemplate_SQDIFF
功能位于第377行。matchTemplate_SQDIFF_NORMED
功能位于第412行。我是C ++编程的新手。我已经阅读了很长时间的源代码,但仍然不太清楚我应该在哪一行添加代码来根据相应的alpha通道像素对T
和I
进行选择性求和。
有谁可以给我一些指导如何做到这一点?感谢。