我正在尝试使用matchTemplate在更大的图像中检测多个图像,并使用这些图像获取它们的mean()颜色值,以便以后进行比较并确定它们是否具有所需的颜色。
这是我到目前为止所拥有的:
w, h = template.shape[::-1]
method = cv2.TM_CCOEFF_NORMED
res = cv2.matchTemplate(images[1], template, method)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
top_left = max_loc
matches = np.where(res >= threshold)
for (x, y) in zip(matches[1], matches[0]):
cv2.rectangle(images[0], (x, y), (x + w, y + h), [0, 255, 255], 2)
color = cv2.mean(images[0][top_left[1]:top_left[1] + h, top_left[0]:top_left[0] + w])
cv2.imwrite('./TESTPLSWORK.png', images[0])
我尝试实现一个forloop,其中每次我使用minMaxLoc时,获取其max_loc值以使用cv2.mean。不幸的是,它仅对数组的第一个元素(匹配输出)进行处理。那是我的主意,但是使用np弹出一个“ matches”的值。在进行第一次迭代后删除不起作用,并且简单地破坏了numpy数组结构。
这将是找到两个与模板匹配的对象的匹配结果:
(array([231, 457], dtype=int32), array([ 957, 1312], dtype=int32))
需要使我的想法可行的输出:
(array([231], dtype=int32), array([957], dtype=int32))