Я пытаюсь сделать так, как описано здесь: Finding a subimage inside a Numpy image, чтобы иметь возможность искать изображение внутри снимка экрана.Поиск небольшого изображения внутри большого (PIL + OpenCV)
код выглядит следующим образом:
import cv2
import numpy as np
import gtk.gdk
from PIL import Image
def make_screenshot():
w = gtk.gdk.get_default_root_window()
sz = w.get_size()
pb = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, False, 8, sz[0], sz[1])
pb = pb.get_from_drawable(w, w.get_colormap(), 0, 0, 0, 0, sz[0], sz[1])
width, height = pb.get_width(), pb.get_height()
return Image.fromstring("RGB", (width, height), pb.get_pixels())
if __name__ == "__main__":
img = make_screenshot()
cv_im = cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR)
template = cv_im[30:40, 30:40, :]
result = cv2.matchTemplate(cv_im, template, cv2.TM_CCORR_NORMED)
print np.unravel_index(result.argmax(), result.shape)
В зависимости от выбранного метода (вместо cv2.TM_CCORR_NORMED) Я получаю совершенно разные координаты, но ни один из них не является (30, 30), как в примере.
Пожалуйста, научите меня, что случилось с таким подходом?
matchtemplate дает вам верхний левый угол прямоугольника, окружающего объект. ты это проверил? –
Да, я знаю это, и это дает мне (0, 0) или (256, 400) или что-то в этом роде. Ничто не близко к реальности. – Enchantner