在图像上查找图像

时间:2019-05-07 17:33:48

标签: python template-matching

存储图片:https://drive.google.com/open?id=1uNx_6KeQaNtKNj1Y2Npd-vOvJ4Pf-X4m 产品图片:https://drive.google.com/open?id=1bev8AjajqbaceUPxVs2Z3iuqUOZaeoE-

我必须在商店图片中找到产品图片 如果仔细看,appy会有所不同。 产品图片为2D,商店图片为3D

还有其他方法吗?

我尝试过opencv的模板匹配功能

    import cv2
    import numpy as np

    img_rgb = cv2.imread('C:\\Users\\ambuj\\Desktop\\NIFLR\\store1.png')
    img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)

    template = cv2.imread('C:\\Users\\ambuj\\Desktop\\NIFLR\\appy1.png',0)
    template= cv2.resize(template,(25,65))

    w,h = template.shape[::-1]

    res = cv2.matchTemplate(img_gray,template,cv2.TM_SQDIFF)

    threshold = 0.1

    loc = np.where( res >= threshold)

    for pt in zip(*loc[::-1]):
        cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0,0,255), 2)
        break

    cv2.imshow('Detected',img_rgb)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

预期结果:在有图片的图像中,应该有一个矩形

实际结果:https://drive.google.com/open?id=18QiX4MWa90jIGdvhfRn5dEOwIA6SHYlx

最左上角有一个红色矩形。

1 个答案:

答案 0 :(得分:0)

我认为您无法通过模板匹配来检测到它,因为模板与商店图像上的对象太不同了。使用级联训练找到该对象。

https://docs.opencv.org/3.4.1/dc/d88/tutorial_traincascade.html