OpenCV Template Matching сопоставляет все с одноцветным эталонным изображением - PullRequest
0 голосов
/ 08 мая 2019

У меня есть эталонное изображение, которое я хочу сопоставить на скриншоте.Это часть скриншота, поэтому она обязательно должна совпадать.

Изображение для поиска:> needleImage <</p>

Полный снимок экрана:

haystackImage

Итак, с OpenCV pyscreeze сопоставляет изображения, подобные этим:

# get all matches at once, credit: /7111135/nahozhdenie-izobrazheniya-vnutri-izobrazheniya-numpy#7111156
result = cv2.matchTemplate(haystackImage, needleImage, cv2.TM_CCOEFF_NORMED)
match_indices = numpy.arange(result.size)[(result > confidence).flatten()]
matches = numpy.unravel_index(match_indices[:limit], result.shape)

некоторые тесты:

opencv + numpy confidence 1.0: 0 matches
first ten: []
Bench passed in 0.205 seconds

opencv + numpy confidence default (0.999): 1795428 matches
first ten: [(0, 0, 13, 13), (1, 0, 13, 13), (2, 0, 13, 13), (3, 0, 13, 13), (4, 0, 13, 13), (5, 0, 13, 13), (6, 0, 13, 13), (7, 0, 13, 13), (8, 0, 13, 13), (9, 0, 13, 13)]
Bench passed in 0.852 seconds

pure python method: 6690 matches
first ten: [(1855, 208, 13, 13), (1856, 208, 13, 13), (1857, 208, 13, 13), (1858, 208, 13, 13), (1859, 208, 13, 13), (1860, 208, 13, 13), (1861, 208, 13, 13), (1862, 208, 13, 13), (1863, 208, 13, 13), (1864, 208, 13, 13)]

Bench passed in 1.344 seconds

Я играл с уверенностью, соответствуя методам, но с OpenCV результаты такие же.Он соответствует каждому пикселю или не соответствует всему.

Чистый метод python от pyscreeze дает наиболее правильные результаты - он правильно сопоставляет изображения.

Может быть, мне не нужно что-то вроде OpenCV, чтобы соответствовать частиСкриншот?Но чистый питон медленнее в 5-10 раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...