夜雨聆风学习资料网

ARTICLE · 1167439

象棋游戏中棋盘棋子的识别,附源码

象棋游戏中棋盘棋子的识别,附源码

大家好,我是郭立员~,本文所讲内容仅供学习参考,请勿非法使用。

前言

这次只是做棋盘棋子的识别,不做象棋api的对接。

一、识别的思路

棋盘大小是9*10共计90个位置,所以我们可以框选出90个区域范围,然后用图色命令识别出每个位置的棋子(无棋子位置为空)。

二、划分区域

棋盘一共有90个位置,每个位置原本就是一个点,现在把它扩展成一个范围。

扩展的方式是上下左右各个方向扩展半个棋盘格。

如果棋盘格不是正方形,那么就把长宽分开写。

三、识别每一个范围的棋子

① 把每一个棋子截图,一般相同的棋子截取一张就可以了,这里按照1-14的编号命名的。

② 做一个数组,把1-14的编号对应的棋子命名存储在数组里面

Dim arr_pic_content = {"車","馬","砲","象","士","卒","将","俥","傌","炮","相","仕","兵","帥"}

这样通过识别的序号就可以知道对应的棋子是哪一个。

③ 使用opencv找图,这个找图命令相对容错要高一点,保证相同棋子都可以识别出来。

四、识别的代码

Dim x = 38Dim y = 224Dim w = 58dim h = 56.5Dim arr = {null}Dim intx,intyDim arr_pic_content = {"車","馬","砲","象","士","卒","将","俥","傌","炮","相","仕","兵","帥"}Dim arr_pic = {null}For n = 1 To 14    arr_pic[n] = "/sdcard/pictures/xq/"&n&".png"NextKeepCaptureFor j = 0 To 9    arr[j+1] = {null}    For i = 0 To 8                dim ret  = OpenCV.FindImgBest(x + (i - 0.5) * w, y + (j - 0.5) * h, x + (i + 0.5) * w, y + (j + 0.5) * h, join(arr_pic,"|"), 0.8, 0.9, 1.2, 10,{"isGray":true})        If ret["code"] = 0 Then             arr[j + 1][i + 1] = arr_pic_content[ret["data"][1]["index"]]         Else             arr[j + 1][i + 1] = "  "        End If    NextNextReleaseCaptureFor j = 1 To 10    TracePrint encode.TableToJson(arr[j])Next

五、识别的结果

测试识别耗时是2秒多,这个速度后续写下棋的脚本完全够用的。

=正文完=
我个人微信xiaomu86119,有按键精灵安卓版的问题可以做找我,常见的问题基本都会,收费解答~
更多内容点击进入公众号查看往期文章

相关学习资料