여기에 설명 된대로 수행하려고합니다 : 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