cv2玩连连看

本篇博客主要介绍利用cv2来玩连连看。

主要分为两步:

1、对连连看游戏截图进行分割,得到单个的物体;

2、对单个的物体进行模板匹配。

进行图像分割的代码如下所示:

x1 = 0
y1 = 0
xp = int(height / 9)
yp = int(width / 8)
mat = []
for x2 in range(xp, height, xp):
    p1 = []
    for y2 in range(yp, width, yp):
        cut = img[x1: x2, y1: y2]
        cv2.imshow('cut', cut)
        cv2.waitKey(100)
        y1 = y2
        p1.append(cut)
    cv2.waitKey(100)
    y1 = 0
    x1 = x2
    mat.append(p1)

进行模板匹配的代码如下所示:

def compare(i, j, img):
    for x in range(lexX):
        if x < i:
            continue
        for y in range(lenY):
            if x <= i and y < y:
                continue
            z = mat[x][y]
            # 图片相似度
            y1 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
            z1 = cv2.cvtColor(z, cv2.COLOR_BGR2GRAY)
            '''
            第一个参数是源图像,第二个参数是模板图像,第三个参数是匹配的结果图像,第四个参数是用于指定比较的方法
            cv::TM_CCORR_NORMED:归一化的相关性匹配方法,与相关性匹配方法类似,最佳匹配位置也是在值最大处
            '''
            res = cv2.matchTemplate(z1, y1, cv2.TM_CCOEFF_NORMED)

            if res[0][0] >= 0.8:
                if i == x and j == y:
                    continue
                pairs.append((i, j, x, y, res[0][0]))
                print(i, j, x, y, res)

最终匹配结果:

cv2玩连连看_第1张图片

 

cv2玩连连看_第2张图片

cv2玩连连看_第3张图片

 

注:完整代码和测试图片可参考我的GitHub:https://github.com/MrJoeyM/lianliankanGame

你可能感兴趣的:(cv2,玩连连看,Python,Opencv,OpenCV-Python)