我使用 matchtemplate 來檢測深色背景上的 2x2 sqaures。使用我的代碼,它可以毫無問題地檢測到大多數正方形,但無法檢測到正方形的顏色何時為深色和黑色。我嘗試在 opencv 中進行規范化,但效果不佳.. 也嘗試使用掩碼,但它也不起作用(也許我使用掩碼功能錯誤?)因為我缺乏對影像預處理和 opencv 的理解。我相信我錯過了很多東西,但我無法弄清楚我錯過了什么。如果有人能幫助我,我將不勝感激
import cv2
import numpy as np
import time
import win32gui, win32ui, win32con
def imagesearch(per):
img = cv2.imread('target.png', cv2.IMREAD_GRAYSCALE)
img1 = cv2.imread('target.png')
template = cv2.imread('./map/monster.png', cv2.IMREAD_GRAYSCALE)
w, h = template.shape[::-1]
meth = [cv2.TM_CCOEFF, cv2.TM_CCOEFF_NORMED, cv2.TM_CCORR, cv2.TM_CCORR_NORMED, cv2.TM_SQDIFF, cv2.TM_SQDIFF_NORMED]
res = cv2.matchTemplate(img, template, meth[3])
threshold = per
loc = np.where(res>=threshold)
if loc[0].any():
for pt in zip(*loc[::-1]):
cv2.rectangle(img1, pt, (pt[0] w, pt[1] h), (0,0,255), 1)
cv2.imshow("dst", img1)
cv2.waitKey(0)
cv2.destroyAllWindows()
imagesearch(0.8)

模板

圖片

結果
uj5u.com熱心網友回復:
您面臨的問題是您要檢測的部分正方形不遵循“比背景亮”并且“比背景暗”的規則。解決這個問題的方法是使用反轉顏色的模板影像:

^-- 反模板
import cv2
import numpy as np
import time
def imagesearch(per):
img = cv2.imread('openCV_squareDetection.png', cv2.IMREAD_GRAYSCALE)
img1 = cv2.imread('openCV_squareDetection.png')
template_inversed = cv2.imread('openCV_squareDetection_template_inversed.png', cv2.IMREAD_GRAYSCALE)
template = cv2.imread('openCV_squareDetection_template.png', cv2.IMREAD_GRAYSCALE)
w, h = template.shape[::-1]
meth = [cv2.TM_CCOEFF, cv2.TM_CCOEFF_NORMED, cv2.TM_CCORR, cv2.TM_CCORR_NORMED, cv2.TM_SQDIFF, cv2.TM_SQDIFF_NORMED]
res = cv2.matchTemplate(img, template , meth[1])
res_inversed = cv2.matchTemplate(img, template_inversed, meth[1])
threshold = per
loc = np.where(res >=threshold)
loc_inversed = np.where(res_inversed>=threshold)
if loc[ 0].any():
for pt in zip(*loc[::-1]):
cv2.rectangle(img1, pt, (pt[0] w, pt[1] h), (0,0,255), 1)
if loc_inversed[0].any():
for pt in zip(*loc_inversed[::-1]):
cv2.rectangle(img1, pt, (pt[0] w, pt[1] h), (0,0,255), 1)
cv2.imshow("dst", img1)
cv2.waitKey(0)
cv2.destroyAllWindows()
imagesearch(0.95)

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/519705.html
