如何根据模板中相应的alpha通道像素有选择地对模板和图像补丁像素求和?

时间:2014-07-13 07:57:27

标签: python c++ image opencv computer-vision

我在Python中使用这个OpenCV函数(cv2.matchTemplate)。

我可以使用6种匹配方法。以下是两个例子。

CV_TM_SQDIFF:

enter image description here

CV_TM_SQDIFF_NORMED:

enter image description here

根据文档,总和是在源图像的模板图像和图像补丁中的所有像素上完成的。

在我的模板图片中,我有一个仅包含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

  1. cv2.matchTemplate功能位于第828行。
  2. ocl_matchTemplate功能位于第549行。
  3. matchTemplate_SQDIFF功能位于第377行。
  4. matchTemplate_SQDIFF_NORMED功能位于第412行。
  5. 我是C ++编程的新手。我已经阅读了很长时间的源代码,但仍然不太清楚我应该在哪一行添加代码来根据相应的alpha通道像素对TI进行选择性求和。

    有谁可以给​​我一些指导如何做到这一点?感谢。

1 个答案:

答案 0 :(得分:1)

我问了一个类似的问题here。其中一个答案可能会为您提供解决方案。