opencv 滑块缺口识别模板匹配成功率90% demo

import cv2 as cv

def findPic(img_bg_path, img_slider_path):
    """
    找出图像中最佳匹配位置
    :param img_bg_path: 滑块背景图本地路径
    :param img_slider_path: 滑块图片本地路径
    :return: 返回最差匹配、最佳匹配对应的x坐标
    """

    # 读取滑块背景图片,参数是图片路径,OpenCV默认使用BGR模式
    # cv.imread()是 image read的简写
    # img_bg 是一个numpy库ndarray数组对象
    img_bg = cv.imread(img_bg_path)
    cv.imshow('bg', img_bg)
    cv.waitKey(0)
    cv.destroyAllWindows()

    img_bg_gray = cv.cvtColor(img_bg, cv.COLOR_BGR2GRAY)

    # 读取滑块,参数1是图片路径,参数2是使用灰度模式
    img_slider_gray = cv.imread(img_slider_path, 0)

    # 在滑块背景图中匹配滑块。参数cv.TM_CCOEFF_NORMED是opencv中的一种算法
    res = cv.matchTemplate(img_bg_gray, img_slider_gray, cv.TM_CCOEFF)
    min_val, max_val, min_loc, max_loc = cv.minMaxLoc(res)


    # 画出匹配区域
    w, h = img_slider_gray.shape[0], img_slider_gray.shape[1]
    print(w, h)
    top_left = min_loc
    bottom_right = (top_left[0] + w, top_left[1] + h)
    cv.rectangle(img_bg, top_left, bottom_right, 255, 2)
    cv.imshow('img_bg_later', img_bg)
    cv.waitKey(0)
    cv.destroyAllWindows()

    print(min_val, max_val, min_loc, max_loc)

findPic('./bg.jpg', './slide.jpg')

 

 

注意, 使用模板匹配有6种方式, 不同的方式匹配的最佳结果min_loc, 或是max_loc 所以再尝试的过程中,可以 尝试切换top_left = min_loc 或者是 top_left = max_loc

opencv 滑块缺口识别模板匹配成功率90% demo_第1张图片

官网是这样说明的

如果方法是TM_SQDIFF或TM_SQDIFF_NORMED,则取最小值

列出模板匹配参数method的可选列表

methods = ['cv.TM_CCOEFF', 'cv.TM_CCOEFF_NORMED', 'cv.TM_CCORR',
            'cv.TM_CCORR_NORMED', 'cv.TM_SQDIFF', 'cv.TM_SQDIFF_NORMED']

你可能感兴趣的:(python,opencv识别滑块,python,opencv滑块,opencv滑块,opencv,滑块模板匹配,opencv)