我试过一个堆栈溢出的代码段。我想在另一个图像中找到一个图像,不管是旋转还是调整大小。
import matplotlib.pyplot as plt
import numpy as np
import cv2
import os
import pathlib
os.chdir(pathlib.Path(__file__).parent.resolve())
image = cv2.imread('picture.png')
template = cv2.imread('penguin.png')
heat_map = cv2.matchTemplate(image, template, cv2.TM_CCOEFF_NORMED)
h, w, _ = template.shape
y, x = np.unravel_index(np.argmax(heat_map), heat_map.shape)
cv2.rectangle(image, (x,y), (x+w, y+h), (0,0,255), 5)
cv2.imshow("pippo",cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
cv2.waitKey(0)
结果并不像预期的那样。
我得到了
pippo
谢谢你的解释。
根据这个片段,我清楚地预料到企鹅在蓝色的盒子里
1条答案
按热度按时间v1l68za41#
白色比企鹅更符合模板。
由于图像和模板之间没有亮度和对比度差异,因此我们不必应用归一化相关性。
选择cv2.TM_SQDIFF而不是
cv2.TM_CCOEFF_NORMED
将为上述情况给予更好的匹配。将
heat_map = cv2.matchTemplate(image, template, cv2.TM_CCOEFF_NORMED)
替换为:这个方法效果更好的原因是,与其他方法相比,企鹅的黑色部分在平方差中的权重要大得多。
代码示例:
输入图像:
输入模板:
输出:
cv2.TM_CCOEFF_NORMED
的标题图:cv2.TM_SQDIFF
的标题图: