getnaked
@getnaked

Как через opencv найти одно изображение внутри другого?

Есть такой код, он отлично справляется с большими цветными изображениями. Мне понадобилось узнать есть ли серая стрелка (2.png) на другом изображении (1.png) и нет ни одного совпадения. Стрелка откадрирована из исходного изображения. В чём может быть проблема, получаемый после обработки цвет "слишком серый"?
da01c62839464ac1a3484d1b3a79622a.png
spoiler
import cv2
import numpy as np
import matplotlib.pyplot as plt
import sys
import requests
import os

img_rgb = cv2.imread('1.png')
img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)
template = cv2.imread('2.png',0)
w, h = template.shape[::-1]

res = cv2.matchTemplate(img_gray,template,cv2.TM_SQDIFF_NORMED)
threshold = 0.4
loc = np.where( res >= threshold)

f = set()

for pt in zip(*loc[::-1]):
    cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0,0,255), 2)

    sensitivity = 60
    f.add((round(pt[0]/sensitivity), round(pt[1]/sensitivity)))

cv2.imwrite('result.png',img_rgb)

found_count = len(f)

if found_count >0:
    print ("found")
    
else:
    print ("not found")
  • Вопрос задан
  • 524 просмотра
Пригласить эксперта
Ответы на вопрос 1
2ord
@2ord
Наверно надо просто поменять местами 1.png и 2.png в коде.
template - это большее изображение, чем искомое.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы