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)
私は星が付いた米国の旗と黒の星からなるマスクのイメージを持っています。マスク画像を使用して、私は異なった色をしていますが、米国の旗のすべての星を検出したいと思います。上記のコードを使用すると、下の図に示すように、白と書かれた星を認識することしかできませんでした。質問画像のテンプレートと一致する画像内の異なる色のオブジェクトを認識する方法は?
ボックス着色赤、そのマスク画像内の1つのその着色ブラックマッチング下星を有しています。私はこれらの星を識別するために灰色のイメージを使用しているため、これは推測しています。以下に示すように、色付きの星はグレー表示の過程で退色し、アルゴリズムは背景色と区別できません。
、元画像は下に掲載されています
オリジナルの入力画像も投稿できますか? ( 'us_flag_color.png'と' mask.png') –
オブジェクトを区別する色であるため、RGB画像のグレースケールバージョンではなく、HSVまたはHSI色空間で作業することを検討します。 –
@DanMašekが追加されました。 – user007