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

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

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


  • 上个对比效果


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


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


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

   在上篇中顺序打印棋子的时候每条线上的棋子的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("识别出错了!")


相关文章
|
6月前
|
存储 Python 容器
每日一题 2013. 检测正方形
每日一题 2013. 检测正方形
牛客竞赛21842 正方形检测
牛客竞赛21842 正方形检测
象棋棋谱之棋子识别(二)
象棋棋谱之棋子识别(二)
474 0
最原始的扫雷,最适合休闲时乐一乐。
最原始的扫雷,最适合休闲时乐一乐。
771. 宝石与石头
 给你一个字符串 jewels 代表石头中宝石的类型,另有一个字符串 stones 代表你拥有的石头。 stones 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。 字母区分大小写,因此 "a" 和 "A" 是不同类型的石头。   示例 1: 输入:jewels = "aA", stones = "aAAbbbb" 输出:3 示例 2: 输入:jewels = "z", stones = "ZZ" 输出:0   提示: 1 <= jewels.length, stones.length <= 50 jewels 和 stones 仅由英文字母组成
88 0
|
Java C++ Python
受伤的皇后——21年模拟赛
受伤的皇后——21年模拟赛
79 0
|
C语言
国王的许诺 相传国际象棋是古印度舍罕王的宰相达依尔发明的。舍罕王十分喜欢象棋,决定让宰相自己选择何种赏赐。这位聪明的宰相指着8×8共64格的象棋盘说:陛下,请您赏给我一些麦子吧,就在棋盘的第1个格子中
国王的许诺 相传国际象棋是古印度舍罕王的宰相达依尔发明的。舍罕王十分喜欢象棋,决定让宰相自己选择何种赏赐。这位聪明的宰相指着8×8共64格的象棋盘说:陛下,请您赏给我一些麦子吧,就在棋盘的第1个格子中
406 0
|
Java
Java锤子剪刀布大家应该都会玩“锤子剪刀布”的游戏: 现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。
Java锤子剪刀布大家应该都会玩“锤子剪刀布”的游戏: 现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。
165 0
|
测试技术 Android开发
autojs象棋识别棋子
牙叔教程 简单易懂
185 0