Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python opencv matchTemplate是否实现了掩码功能?_Python_Opencv_Opencv3.0 - Fatal编程技术网

python opencv matchTemplate是否实现了掩码功能?

python opencv matchTemplate是否实现了掩码功能?,python,opencv,opencv3.0,Python,Opencv,Opencv3.0,到matchTemplate方法。它通过在模板上定义掩码来支持模板与透明模板的匹配。下面我的python程序工作正常,但是如果我在cv2.matchTemplate调用中添加mask参数,它会抛出一个错误: OpenCV Error: The function/feature is not implemented () in matchTemplateMask, file /Users/jared.rada/dev/opencv/modules/imgproc/src/templmatch.cp

到matchTemplate方法。它通过在模板上定义掩码来支持模板与透明模板的匹配。下面我的python程序工作正常,但是如果我在
cv2.matchTemplate
调用中添加
mask
参数,它会抛出一个错误:

OpenCV Error: The function/feature is not implemented () in matchTemplateMask, file /Users/jared.rada/dev/opencv/modules/imgproc/src/templmatch.cpp, line 894
Traceback (most recent call last):
File "masked.py", line 13, in <module>
res = cv2.matchTemplate(img, tmpl, cv2.TM_CCOEFF_NORMED, data, mask)
cv2.error: /Users/jared.rada/dev/opencv/modules/imgproc/src/templmatch.cpp:894: error: (-213)  in function matchTemplateMask`

我如何知道python绑定是否支持掩码功能?

有一个简单的答案:看看,您会发现,它只针对
方法==CV_TM_SQDIFF
方法==CV_TM_CCORR_NORMED
,换句话说,不适用于您想要的
cv2.TM\u cceff\u NORMED
更新以获取答案:请参阅

以及:

模板匹配:为所有方法添加对掩码的支持


现在最新的
pip安装opencv contrib python
将包括所有方法的掩码(在python3.7上的testd(

您可能对版本有错误,如果它在1月19日被合并,它可能只在opencv3.1中。是的,好点@berak,我也尝试了3.1.0(由
print cv2.确认,版本号为
3.1.0
,但它抛出了相同的错误。关于如何在python绑定中实现此功能,还有其他建议吗?我查看了错误中提到的.cpp文件,并看到此签名
static bool matchTemplate\u CCOEFF\(InputArray\u图像、InputArray\u模板、OutputArray\u结果)
因此似乎没有掩码的参数。
import sys
import numpy as np
import cv2


img = cv2.imread('./image.jpg')
tmpl = cv2.imread('./tmpl.png')
mask = cv2.imread('./mask.png')
w, h = tmpl.shape[:-1]
data = np.zeros((h, w, 3), dtype=np.uint8)

res = cv2.matchTemplate(img, tmpl, cv2.TM_CCOEFF_NORMED, data, mask)

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(img, top_left, bottom_right, (0, 0, 255), 2)

cv2.imshow("images", np.hstack([img]))
cv2.waitKey(0)