Я хочу использовать OpenCV и Python, чтобы создать программу, которая проверяет, находится ли меньшее изображение внутри большего изображения.
Я знаю, что находится внутри большего изображения, но меньшее изображение может меняться каждый раз,поэтому для меня важно избежать ложных срабатываний.
Я использовал cv2.matchTemplate
с режимом cv2.TM_CCOEFF_NORMED
для проверки достоверности, и это прекрасно работает, если маленькое изображение является просто обрезанной версией полногоimage.
Однако возникают проблемы, если, например, изображение меньшего размера - 1x1 белый пиксель.На моем большом изображении много пробелов, и я не хочу, чтобы это совпадало.
Вот мой код:
#!/usr/bin/env python
import cv2
def main():
source = cv2.imread('source.png', 0)
template = cv2.imread('template.png', 0)
res = cv2.matchTemplate(source, template, cv2.TM_CCOEFF_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
if max_val < 0.9:
print 'Confidence score is less than 0.9, no match found.'
return
print 'Match found!'
if __name__ == '__main__':
main()
Как я могу улучшить это?Я полагаю, что был бы способ проверить, соответствует ли соответствие хотя бы определенному размеру (например, 50x50), чтобы система не ломалась, если в качестве шаблона используется крошечное изображение, но я не уверен.