Форум сайта python.su
Всех приветствую.
С пайтаном работаю совсем не много, но тут встала задача…
Есть 2 графических файла: image.png - большая картинка, object.png - элемент, который содержится в image.png на прозрачном фоне. Как получить координаты object.png на image.png? Гуглил много, ничего конкретного не нашел. Набрел на OpenCV, разобраться не могу. Сдается мне, что решить задачу можно куда проще. Буду крайне признателен за любые советы, ссылки и т.д.
Офлайн
hexkey
Всех приветствую.С пайтаном работаю совсем не много, но тут встала задача…Есть 2 графических файла: image.png - большая картинка, object.png - элемент, который содержится в image.png на прозрачном фоне. Как получить координаты object.png на image.png? Гуглил много, ничего конкретного не нашел. Набрел на OpenCV, разобраться не могу. Сдается мне, что решить задачу можно куда проще. Буду крайне признателен за любые советы, ссылки и т.д.
Отредактировано alexiy (Дек. 15, 2013 12:33:52)
Офлайн
alexiyСпасибо, но по логике вопросов нет, Вы все правильно описали. Вопрос как раз и состоит в том, как описанное Вами реализовать… Если покажите пример - буду премного благодарен.
По пикселям сравнивать всё подряд из image.png. Сохранить в массиве какую-то часть цветов из середины маленькой картинки и искать точно такой-же набор пикселей на большой картинке перебором. Если картинки не размером в гигабайты, то быстро сработает.
Офлайн
hexkey
Спасибо, но по логике вопросов нет, Вы все правильно описали. Вопрос как раз и состоит в том, как описанное Вами реализовать… Если покажите пример - буду премного благодарен.
from PIL import Image def get_mask(img, x_start, y_start): mask = [] for x in range(10): mask_y = [] for y in range(10): mask_y.append(img[x_start + x, y_start + y]) mask.append(mask_y) return mask img = Image.open("milla.png") img = img.convert("RGBA") pixdata_img = img.load() gun = Image.open("milla-part.png") gun = gun.convert("RGBA") pixdata_gun = gun.load() search_mask = get_mask(pixdata_gun, gun.size[0]/2 - 5, gun.size[1]/2 - 5) for x in range(img.size[0]-10): for y in range(img.size[1]-10): if pixdata_img[x, y] == search_mask[0][0]: pixdata_mask = get_mask(pixdata_img, x, y) if pixdata_mask == search_mask: print "Search image coordinates: [{}, {}]".format(x+5,y+5)
Отредактировано alexiy (Дек. 15, 2013 14:12:26)
Офлайн
Спасибо за помощь, сам вчера придумал решение, работает отлично, даже лучше, чем требовалось.
import sys import cv2 source = cv2.imread('test.png') object = cv2.imread('object.png') result = cv2.matchTemplate(source,object,cv2.TM_CCOEFF_NORMED) y,x = np.unravel_index(result.argmax(), result.shape) print y,x
Отредактировано hexkey (Дек. 16, 2013 09:40:49)
Офлайн
hexkeyCкорей сам таки прочел доку и нашел нужную функцию…
сам придумал решение
Офлайн
SingularityНаписали бы как решилась задача ))
Офлайн