移动互联网技术课程设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一:题目:远程图像传输
利用无线网络图像传感器,演示过程图像的传输遥控
二:内容
网络通讯实验
机器人配置无线网卡,也可以使你的RBOT 机器人直接接入到国际互联网,还可以使用无线网络将多台RBOT 机器人连接起来组成局域网,也是可以在其他地方接上网络输入IP 地址就可以控制您实验室的机器人了,使人看到您实验室中的景象,您可以遥控机器人行走,甚至于说您可以远程控制您的机器人
在执行远程图像传输演示程序时需要两台机器人,一台做服务器另一台做客户机。或者您可以用一台机器人和一台带无线网卡的电脑。首先您需要把二者用无线网络连接好,您可以用ping 命令看是否连接好。使用机器人做服务器端,执行exe;
其中包括三个主要类:
1、控制类
2、图像类
3、无线信号类
三:功能
借助无线网络和图像传感器,演示远程图像传输和远程遥控。
四:程序
1、客户端
客户端的核心主要是涉及用户的程序传输及对话框上信息的显示
(PhotoTransmitClientDlgCpp)它主要是生成下面的一个对话框并接
收处理从服务器传送过来的信息
并且添加相应的控件,以及这些控件的实现。
以下主要简析其中的函数的功能:
CPhotoTransmitClientDlg::CPhotoTransmitClientDlg(CWnd* pParent
/*=NULL*/): CDialog(CPhotoTransmitClientDlg::IDD, pParent) ,
m_nSpeed(0)
它是继承了对话框类,以便获得对话框操属性操作。
CPhotoTransmitClientDlg::OnInitDialog()
这个函数是有关对话框的变量的初始化,主要是设置图标,得到机器人的实例,得到网络客户端设备句柄,得到图像采集设备句柄
CPhotoTransmitClientDlg::OnPaint()
绘画函数,它实现的是绘制图标
CPhotoTransmitClientDlg::RecvProc(LONG nOwner,void* lpReturn)
此函数的功能是接受图像,并且不图像的信息显示出来
CPhotoTransmitClientDlg::OnRecoEvent(WPARAM wParam, LPARAM lParam)
记录事件,显示判断它上下左右等消息命令
CPhotoTransmitClientDlg::PreTranslateMessage(MSG* pMsg)
这是无线遥控的实现,它添加了上下左右键的处理操作
2、服务器端
服务器端也是要创建一个对话框,以显示自身的当前状态和客户端的
链接信息;其创建的对话框如下:
服务器的对话框文件的实现和客服端的思想基本一样;首先都是继承c++中的基类CDialog;
接下来初始化,CPhotoTransmitServerDlg::OnInitDialog()
需要用到网络服务器端类库、图像采集类库和运动控制类库,需要把这些类库添加进来。然后得到机器人实例,获取TCP协;得到视频;采集设备句柄;得到运动设置句柄;
设置网络参数和图像参数:
主要是:得到网络端口;设置存储图像的内存长度;设置网络;绑定网络处
理;设置图像大小;设置图像参数;绑定显示窗口;设置设备号;申请动态内存拷贝当前图像帧到所申请的内存空间;网络发送图像;CPhotoTransmitServerDlg::OnBnClickedEnd()
处理控件的响应函数
CPhotoTransmitServerDlg::PreTranslateMessage(MSG* pMsg)
传输无线信号
CPhotoTransmitServerDlg::RecvProc(LONG nOwner,void* lpReturn)
运动回调函数,实现机器人遥控运动的操作
五:流程图
六:模块
A、对话框模块:添加各种按钮,并响应相应的消息,显示图像
信息,得到程序当前的运行状态;
B、网络模块:设置服务器,设置客服端,链接连个端口进行信
息的交流传递处理;
C、控制模块:控制程序的运行,发送命令及处理程序返回的信
息;
D、图像模块:获取网络传递的信息流,按照图像的格式处理整
合,并显示到屏幕;
七:图像信息的深度处理
由于硬件设备的条件限制,图片的获取及显示仍有改进之处,我们利用软件提高图片的显示效果;
下面提供三种图片的处理
1、灰度化
把24位真彩BMP图像转变成256阶灰度图的具体步骤如下:
(1) 修改信息头
信息头共有11部分,灰度化时需要修改两部分
bi2.biBitCount=8;
bi2.biSizeImage=( (bi.biWidth+3)/4 ) * 4*bi.biHeight;
(2)修改文件头
文件头共有5部分,灰度化时需要修改两部分
bf2.bfOffBits =
sizeof(bf2)+sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD);
bf2.bfSize = bf2.bfOffBits + bi2.biSizeImage;
(3)创建调色板
RGBQUAD *ipRGB2 = (RGBQUAD *)malloc(256*sizeof(RGBQUAD));
for ( i = 0; i < 256; i++ )
ipRGB2[i].rgbRed = ipRGB2[i].rgbGreen = ipRGB2[i].rgbBlue =
i;
(4)修改位图数据部分
这部分主要是由原真彩图的rgbRed、rgbGreen、rgbBlue分量值得到灰
度图像的灰度值Y,可以用下面公式得到:
Y=0.299*rgbRed+0.587* rgbGreen+0.114*rgbBlue;