下棋机器人棋子图像识别的软件代码之matlab仿真

本文介绍了如何利用MATLAB进行棋子图像识别,通过摄像头每隔固定时间抓拍棋盘,用图像相减判断是否下棋,再用霍夫变换检测新棋子位置。主要步骤包括摄像头连接、图像减运算、霍夫圆检测和直线检测,最终确定棋子的行列位置。
摘要由CSDN通过智能技术生成

引言:
大一寒假放的时间挺长的,在家空着便想着搞点什么软件玩玩,想到前不久学的点图像处理基础知识,便想将它们整合一下,弄个实在的东西,于是便想起了这个。我就先仅涉及一下它的棋子识别的代码的matlab仿真,也算一时兴起了吧


总体思路:
由摄像头定期对棋盘进行拍摄,将拍摄的照片传给matlab,matlab将这次拍摄的照片与上次拍摄的照片进行图像相减运算,得到一个新图像,如果这个新图像的所有像素点求和小于一个值,则说明两张图差不多,因而可以说棋盘上没有下新棋,继续上述过程;反之则对新图像进行图像处理,运用hough圆检测找该棋子,并通过hough直线检测找到棋盘的横纵线,由此判断出该棋子在第几行,第几列,从而判断出棋子位置。


matlab代码实现:
1:首先我们要有一个摄像头,将采集的图像数据每隔一定时间及时传送给matlab:
步骤:
A:将摄像头与电脑usb连接并下载驱动程序

B:用matlab查看本机连有的摄像头,输入命令imaqhwinfo,显示结果为:

InstalledAdaptors: {'gentl'  'gige'  'matrox'  'winvideo'}
MATLABVersion: '8.6 (R2015b)'
ToolboxName: 'Image Acquisition Toolbox'
ToolboxVersion: '4.10 (R2015b)'

C:查看’winvideo’摄像头的id号,输入命令imaqhwinfo( ‘winvideo’ ),显示结果为:

AdaptorDllName: 'D:\matlab\matlab\osgenericvideointerface\toolbox\imaq\supportpackages\genericvideo\…'
    AdaptorDllVersion: '4.10 (R2015b)'
          AdaptorName: 'winvideo'
            DeviceIDs: {[1]}

D:每隔3秒读取摄像头图像:

clear;
vid = videoinput('winvideo',1);%通过videoinput()创建视频输入对象
preview(vid);%显示所创建的视频对象
start(vid);%开始vid视频输入对象定时
h=figure('NumberTitle','off','Name','视频',...
'MenuBar','none','color','c',...
'Position', [0, 0, 1, 1], 'Visible', 'on'); %新建读取的图像窗口
while ishandle(h)%判断是否有效的图像对象句柄
 frame1=getsnapshot (vid); % 捕获前一张图像
 flushdata(vid);%清除数据获取引擎的所有数据、置属性SamplesAvailable为0
 imshow(a);
 pause(3);%等3秒后获取下一张图片
 frame2=getsnapshot (vid);% 捕获后一张图像
 flushdata(vid);
end;

2:接着对图像进行减运算,判断是否有新棋子出现(假设对方是白棋):

 frame=imsubtract(frame2,frame1);%图像相减
 frame=im2bw(frame,220/255);%设定阈值,将白棋找出,去掉黑棋
 num=sum(sum(frame),2);%求相减新图像的像素点之和
 if num>1000%有新白棋出现
  h=[-1 -1 -1;-1 8 -1;-1 -1 -1];%拉普拉斯卷积核
  frame=imfiter(frame,h);%提取黑棋的边界
 end

3

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值