import numpy as np
import cv2
import os
dir = 'C:\\Project\\Interview Packet'
os.chdir(dir)
image = cv2.imread('us_flag_color.png')
template = cv2.imread('mask.png')
imageGray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
templateGray = cv2.cvtColor(template, cv2.COLOR_BGR2GRAY)
template = cv2.Canny(template, 50, 200)
result = cv2.matchTemplate(imageGray, templateGray, cv2.TM_SQDIFF)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
w, h = template.shape[:2]
threshold = 0.8*max_val
loc = np.where( result >= threshold)
for pt in zip(*loc[::-1]):
cv2.rectangle(image, pt, (pt[0] + w, pt[1] + h), (0,0,255), 2)
cv2.imwrite("res.png", image)
我有一面带有星星的美国国旗和一张黑色星星的面具图像。使用掩模图像我想检测美国国旗中的所有星星,尽管颜色不同。当我使用上面的代码时,我只能得到标记为白色的星星,如下图所示。
红色的方框下面有一颗彩色黑色的星星与掩模图像中的星形相匹配。我猜这是因为我使用灰色图像来识别这些星星。如下所示,彩色星星在灰化过程中褪色,算法无法将它们与背景颜色区分开来。
原始图片张贴在下面: