#识别之前要做的是边框排序,根据上面拿到的轮廓数据#这里按照Y,X递增的方式进行
questionCnts2 = sorted(questionCnts.copy(), key=lambda x: (x[1],x[0]))
#排序我这里遇到了问题,因为每行棋子识别的时候,坐标有些高低差导致排序结果可能跟棋盘显示有些出入#其实识别之后可以根据上一篇文章得到的棋盘表格一步一步的得到棋子,我这里没做#我用了个笨办法处理的 就是每行的Y轴根据个大致范围固定了
if abs(y - 19) < 20:
y = 19
if abs(y - 88) < 20:
y = 88
#拿到了边框后我们可以根据边框截取抠图了
x, y, w, h = questionCnts2[i]
# print(x, y, w, h)
im = img[y:y + h, x:x + w]
#抠图后然后根据模板匹配算法得到最匹配的模板
result = cv.matchTemplate(cv.resize(old_img,None,fx=0.8, fy=0.8, interpolation = cv.INTER_CUBIC),tempImg,cv.TM_CCOEFF)
(_, score, _, _) = cv.minMaxLoc(result)
if check_score == 0 or score > check_score:
#最大得分项
check_score = score
#最大得分项的文件名,然后根据字典获取棋子名称
check_img = fileName
复制代码