象棋棋谱之棋子识别(三)

简介: 象棋棋谱之棋子识别(三)

    象棋棋谱之棋子识别(二)


  • 上个对比效果


网络异常,图片无法展示
|


网络异常,图片无法展示
|


  • 遇到的主要问题
    想要保存棋盘的话需要知道每个坐标的棋子。

   在上篇中顺序打印棋子的时候每条线上的棋子的y(高度坐标,注意算出来的x,y坐标是从左上方开始的)坐标有出入,在根据坐标排序的时候,就出现乱序了。


   之前的做法就是根据棋盘每条横线的大概高度,误差在一定范围内的就认定为此线的棋子,大概的做法如下。


#第一排的棋子高度大概就在19左右 
          if abs(y - 19) < 20: 
             y = 19
复制代码


我们想要完整实现棋盘识别的话,需要知道每个坐标点的棋子,上面的方法就没必要了。这里需要的是根据棋盘的坐标点来寻找匹配的棋子坐标,然后识别每个坐标点上的棋子。思路如下:\


网络异常,图片无法展示
|


     思路如下


chess_array=[[] for i in range(10)]
if(len(sxFilter)==9 and len(zxFilter)==10):
  #竖线 直线
  print("---------------------")
  for i in range(len(zxFilter)):
        for j in range(len(sxFilter)):
            #直线坐标
            x1,x2,y1,y2=zxFilter[i]
            #竖线坐标
            x3,x4,y3,y4=sxFilter[j]
            check = False
            print(zxFilter[i],"-",sxFilter[j],i,j)
            for k in range(len(questionCnts)):
                  x, y, w, h=questionCnts[k]
                  #获取中心坐标
                  centre_x=x+w/2
                  centre_y=y+h/2
                  #范围之内匹配成功
                  print(centre_x,"-",centre_y)
                  #获取范围
                  if(abs(centre_x-x3)<25 and abs(centre_y-y1)<25):
                    print("命中!")
                    check=True
                    #抠图
                    im = img[y:y + h, x:x + w]
                    #匹配
                    orc = get_match(im)
                    if orc is not None:
                          chess_array[i].append(orc)
                    else:
                        print("未识别...")
            if not check:
                  chess_array[i].append("空空空")
else:
  print("识别出错了!")


目录
打赏
0
0
1
0
2
分享
相关文章
autojs之停用音量上停止脚本
autojs 8.7.1自带示例中提供了某些开关
2175 0
【AI系统】CPU 指令集架构
本文介绍了指令集架构(ISA)的基本概念,探讨了CISC与RISC两种主要的指令集架构设计思路,分析了它们的优缺点及应用场景。文章还简述了ISA的历史发展,包括x86、ARM、MIPS、Alpha和RISC-V等常见架构的特点。最后,文章讨论了CPU的并行处理架构,如SISD、SIMD、MISD、MIMD和SIMT,并概述了这些架构在服务器、PC及嵌入式领域的应用情况。
561 5
Oracle数据库优化策略
【10月更文挑战第25天】Oracle数据库优化策略
114 5
oss客户端加密
阿里云OSS支持客户端加密,允许用户在本地加密数据后上传,确保数据在传输和存储时的隐私安全。用户管理主密钥,控制数据密钥加密与解密,增强数据控制和合规性。此机制适用于高安全需求场景,如金融、医疗等,但用户需负责密钥管理和加密操作。
440 8
VB.NET 中使用SqlConnection类连接到Microsoft SQL Server数据库的详细步骤
VB.NET 中使用SqlConnection类连接到Microsoft SQL Server数据库的详细步骤
460 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问