机器人及视觉技术实验指导书_第1页
机器人及视觉技术实验指导书_第2页
机器人及视觉技术实验指导书_第3页
机器人及视觉技术实验指导书_第4页
机器人及视觉技术实验指导书_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、机器人及视觉技术实验指导书浙江工业大学机械学院2012年1月目录第一部分:基础编程方法 3(一)、实验目的 3(二)、实验设备 3(三)、实验方法 3第二部分:分组实验内容 18题目一:基于机器视觉的叶片面积测量系统 18题目二:基于机器视觉的硬币计数系统 18题目三:基于机器视觉的实时测距系统 18题目四:基于机器视觉的实时定位系统 18题目五:基于机器视觉的水果识别系统 19题目六:基于机器视觉的目标位姿测定系统 19题目七:基于机器视觉的形状识别系统 19第一部分:基础编程方法(一)、实验目的1、了解VC6.0的运行环境及基本操作;2、了解基于对话框的程序的编写;3、了解PC机USB摄像

2、头的控制;4、熟悉数字图像的存储形式以及常用处理方法;5、利用VC对摄像头对图像进行采集与处理。(二)、实验设备1、硬件环境:PC机与USB摄像头;2、软件环境:Windows操作系统、VC6.0编辑器、OpenCV1.0开源库。(三)、实验方法编写程序前,首先下载OpenCV1.0,下载地址:,按照网站的“VC6下安装与配置OpenCV1.0”,对VC和操作系统进行设置,正确操作完成后,按照下面的步骤编写程序。一、开始菜单Microsoft Visual Studio 6.0 Microsoft Visual C+ 6.0,如图1所示,VC6.0运行界面如图2所示。图1图2二、File ne

3、w弹出图3所示的对话框。图3在对话框中选择“MFC AppWizard(exe”,并在“Project name”对话框中填写程序名称,点击“OK”退出对话框。图4三、添加文件至camera文件下,包括“DirectShow”文件夹、“CameraDS.cpp”和“CameraDS.h”。图5四、将工程文件的树形结构展开,添加“CameraDS.cpp”至“Source Files”,添加“CameraDS.h”至“Header Files”。右键单击“Source Files”弹出菜单,选择“Add Files to Folder”,弹出窗口,选择“CameraDS.cpp”文件,并确定;同

4、理添加“CameraDS.h”文件。添加后,这两个文件出现在目录树中。 图6五、项目配置,Project Setting弹出图7所示的对话框,选择“C+”标签页,在“Category”中选择“preprocessor”,在“Additional include directories”中添加“DirectShow/Include”;选择“Link”标签页,在“Category”中选择“Input”,在“Additional include path”中添加“DirectShow/Lib”;在“Object/library modules”中添加“cxcore.lib cv.lib cvaux.

5、lib highgui.lib cvcam.lib”。选择“C+”标签页,在“Category”中选择“Precompiled Headers”,修改默认选项为“Automatic use of precompiled headers”。 图7六、编译程序,打开对话框资源,如图8所示。图8七、将“Picture”控件拖入窗口,设置合适的大小,并修改其属性,更改ID为“IDC_PICL”,“IDC_PICR”。图9八、在“cameraDlg.h”中添加头文件,camerads.h、highgui.h、 。图10九、在CCameraDlg类中(即在cameraDlg.h文件中),添加公共变量。CD

6、C *pDCL, *pDCR ; /图形设备环境指针HDC hDCL, hDCR ; /设备上下文的句柄CRect rectL, rectR; /窗口区域CCameraDS camera ; /CCameraDS类的对象CvvImage m_imageL ;/左窗口图像数据CvvImage m_imageR ;/右窗口图像数据int m_iWidth; /图像宽度int m_iHeight; /图像高度bool m_bCameraOpen ;/判断图像是否已经打开,标志变量int cam_count; /摄像头数目bool m_bImageShow ; /图像是否正在显示图11十、对上述定义的

7、部分变量进行初始化,初始化放在构造函数中。m_iWidth = 320 ;m_iHeight = 240 ;m_bCameraOpen = false ;m_bImageShow = false ;图12十一、添加按钮,实现查找摄像头,并对摄像头进行初始化。void CCameraDlg:OnOpenCamera( /将代码添加到这个函数中图13void CCameraDlg:OnOpenCamera( if(m_bCameraOpenreturn ;cam_count = CCameraDS:CameraCount(; if(!cam_countMessageBox(未查找到摄像头!,MB_

8、ICONINFORMATION;else/获取所有摄像头的名称CString str ;for(int i=0; i 0str.Format(编号为%d摄像机的名字为%s,i,camera_name ;/MessageBox(str,MB_ICONINFORMATION;elsestr.Format(不能获得编号为%d摄像机的名字,i ;MessageBox(str,MB_ICONINFORMATION; /左边显示窗口设置关联pDCL = GetDlgItem(IDC_PICL-GetDC( ;hDCL= pDCL-GetSafeHdc(;GetDlgItem(IDC_PICL-GetCli

9、entRect(&rectL;/右边显示窗口设置关联pDCR = GetDlgItem(IDC_PICR-GetDC( ;hDCR= pDCR-GetSafeHdc(;GetDlgItem(IDC_PICR-GetClientRect(&rectR;if(!camera.OpenCamera(0,0,320,240MessageBox(不能打开摄像头!,MB_ICONINFORMATION; elseMessageBox(摄像头初始完毕!,MB_ICONINFORMATION;m_bCameraOpen = true ; 十二、添加多线程函数,实现图像的采集和处理。 图14UINT CCame

10、raDlg:ReceiveThread(void *paramCCameraDlg *pDlg = (CCameraDlg*param ;while(1if(!pDlg-m_bImageShowreturn 0 ;/获取一帧IplImage *pFrame = pDlg-camera.QueryFrame(;/左边显示窗口,显示原始图像pDlg-m_imageL.CopyOf(pFrame;SetRect(pDlg-rectL, 0,0,pFrame-width,pFrame-height; pDlg-m_imageL.DrawToHDC(pDlg-hDCL,&(pDlg-rectL;/可以添

11、加一个函数用于图像处理,将处理后的结果显示在右边窗口/图像处理函数到添加这里/右边显示窗口,显示处理后的图像pDlg-m_imageR.CopyOf(pFrame,1;SetRect(pDlg-rectR, 0,0,pFrame-width,pFrame-height;pDlg-m_imageR.DrawToHDC(pDlg-hDCR,&(pDlg-rectR;/延时200毫秒Sleep(200 ; return 0 ;十三、为按钮“显示图像”添加函数,调用线程函数。void CCameraDlg:OnImageShow( if(!m_bCameraOpenreturn ;m_bImageSh

12、ow = true ;AfxBeginThread(ReceiveThread, this ; 图15十四、添加“停止显示”按钮,并为其添加函数。图16void CCameraDlg:OnImageStop( m_bImageShow = false ;十五、由此编译程序,并运行,可以得到17所示的界面,因为没有添加图像处理函数,所以两个窗口得到的画面一致。图17十六、添加图像处理函数。 图18void CCameraDlg:ImageThreshold(char *pImageData, int width, int height, int nChannels, int widthStepc

13、har *RImageData,*GImageData,*BImageData ;for(int i=0; i height; i+for(int j =0 ; j width; j+RImageData = pImageData + i*widthStep + j*nChannels + 2 ;GImageData = pImageData + i*widthStep + j*nChannels + 1 ;BImageData = pImageData + i*widthStep + j*nChannels + 0 ;if(uchar*RImageData ImageThreshold(pF

14、rame-imageData,pFrame-width,pFrame-height,pFrame-nChannels,pFrame-widthStep ;图19十八、程序运行结果。图20十九、添加“关闭摄像头”按钮,并为其添加函数。图21void CCameraDlg:OnCloseCamera( if(m_bImageShowMessageBox(请先停止显示图像!,MB_ICONINFORMATION;return ;if(m_bCameraOpencamera.CloseCamera(;m_bCameraOpen = false ; 提示:在对程序进行参数配置完毕,添加代码的同时,建议对

15、程序少有改进,即进行编译处理,以检查是否出现错误。如果出现很多错误,使用菜单Build-Rebuild All,对程序进行完全编译。第二部分:分组实验内容在熟悉以上基本操作步骤的基础上,进行5-7人分组实验,实验题目可在以下题目中选择或自行定义,通过教师审核后,开始实验。题目一:基于机器视觉的叶片面积测量系统基本要求:将一叶片放置在摄像头正下方(图像采集背景自制,背景不能更换),采集一幅图像保存至计算机,程序能够计算出该叶片的实际面积(以平方毫米为单位)。叶片测试对象不少于40片。程序其他功能可自由添加。作业上交内容:可正确执行的程序源代码,程序开发文档(主要介绍程序编写过程、采用的算法、测试

16、的数据统计等)。题目二:基于机器视觉的硬币计数系统基本要求:将多个硬币(若干个一元、五角、一角)放置在摄像头正下方(图像采集背景自制),计算机能实时给出图像中硬币的数量,并实时显示在程序界面上。程序其他功能可自由添加。作业上交内容:可正确执行的程序源代码,程序开发文档(主要介绍程序编写过程、采用的算法、测试的数据统计等)。题目三:基于机器视觉的实时测距系统基本要求:将一个特征比较明显的物体放置在摄像头正前方(目标物体自选),计算机能实时给出目标与摄像头中心的距离(单位:毫米),并实时显示在程序界面上。程序其他功能可自由添加。作业上交内容:可正确执行的程序源代码,程序开发文档(主要介绍程序编写过

17、程、采用的算法、测试的数据统计等)。题目四:基于机器视觉的实时定位系统基本要求:将一个物体(目标物体自选)放置A4纸上,移动物体,计算机能实时给出物体相对于A4纸张的位置(单位:毫米),坐标系以A4纸的一角为基准原点,两个边分别为X、Y轴,计算结果实时显示在程序界面上。程序其他功能可自由添加。作业上交内容:可正确执行的程序源代码,程序开发文档(主要介绍程序编写过程、采用的算法、测试的数据统计等)。题目五:基于机器视觉的水果识别系统基本要求:将某种水果放置在摄像头正下方(图像采集背景自制,背景不能更换),程序能够识别出是哪种水果(指定几种水果中的一种,品种种类不小于5种),并将结果显示在程序界面上。程序其他功能可自由添加。作业上交内容:可正确执行的程序源代码,程序开发文档(主要介绍程序编写过程、采用的算法、测试的数据统计等)。题目六:基于机器视觉的目标位姿测定系统基本要求:将一个圆珠笔(也可以选择其他物体)放置在摄像头正下方(图像采集背景自制,背景不能更换),计算机能给出物体在图像中的位姿(单位:像素),位姿包含两

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论