我需要计算图像中右下角的星星的出现次数,我读了这篇文章Template Matching,并使用下面的代码来找到星星,但我的代码不适用于检测图像中的星星。
我应该在代码中做哪些更改?
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
img_rgb = cv.imread('page.png')
img_gray = cv.cvtColor(img_rgb, cv.COLOR_BGR2GRAY)
template = cv.imread('star_temp.png', 0)
w, h = template.shape[::-1]
res = cv.matchTemplate(img_gray, template, cv.TM_CCOEFF_NORMED)
threshold = 0.8
loc = np.where(res >= threshold)
print(res)
for pt in zip(*loc[::-1]):
cv.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0, 0, 255), 2)
cv.imwrite('res.png', img_rgb)
star_temp.png
page.png
1条答案
按热度按时间rpppsulh1#
这是因为你的模板比图片上的实际星星要大。模板匹配不是比例不变的,所以你需要小心匹配一个几乎相同大小的图片。我从你的目标图片中裁剪了这个:
下面是完整的工作代码片段:
您最终会得到以下结果: