I need find all images within image, for this idea I have found great solution:
import cv2
import numpy as np
img_rgb = cv2.imread('source.png')
img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)
template = cv2.imread('block.png', 0)
w, h = template.shape[::-1]
res = cv2.matchTemplate(img_gray, template, cv2.TM_CCOEFF)
threshold = 0.8
loc = np.where(res >= threshold)
for pt in zip(*loc[::-1]):
cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0, 0, 255), 2)
# cv2.imwrite('res.png', img_rgb)
cv2.imshow('output', img_rgb)
cv2.waitKey(0)
Source data:
https://i.stack.imgur.com/cE5bM.png (source)
https://i.stack.imgur.com/BgzAA.png (template)
I tried to use this code but failed.
What's wrong? I am using python 3.5 and opencv 3.3.0.10
PS: very interesting thing that another solution works perfect but finds only 1 match (best one)