您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 综合/其它 > 机器人及视觉技术实验指导书
1机器人及视觉技术实验指导书浙江工业大学机械学院2012年1月2目录第一部分:基础编程方法.................................................................................................................4(一)、实验目的.......................................................................................................................4(二)、实验设备.......................................................................................................................4(三)、实验方法.......................................................................................................................4第二部分:分组实验内容...............................................................................................................19题目一:基于机器视觉的叶片面积测量系统......................................................................19题目二:基于机器视觉的硬币计数系统..............................................................................19题目三:基于机器视觉的实时测距系统..............................................................................19题目四:基于机器视觉的实时定位系统..............................................................................19题目五:基于机器视觉的水果识别系统..............................................................................20题目六:基于机器视觉的目标位姿测定系统......................................................................20题目七:基于机器视觉的形状识别系统..............................................................................2034第一部分:基础编程方法(一)、实验目的1、了解VC6.0的运行环境及基本操作;2、了解基于对话框的程序的编写;3、了解PC机USB摄像头的控制;4、熟悉数字图像的存储形式以及常用处理方法;5、利用VC对摄像头对图像进行采集与处理。(二)、实验设备1、硬件环境:PC机与USB摄像头;2、软件环境:Windows操作系统、VC6.0编辑器、OpenCV1.0开源库。(三)、实验方法编写程序前,首先下载OpenCV1.0,下载地址:,按照网站的“VC6下安装与配置OpenCV1.0”,对VC和操作系统进行设置,正确操作完成后,按照下面的步骤编写程序。一、开始菜单—MicrosoftVisualStudio6.0—MicrosoftVisualC++6.0,如图1所示,VC6.0运行界面如图2所示。5图1图2二、File—new…弹出图3所示的对话框。图3在对话框中选择“MFCAppWizard(exe)”,并在“Projectname”对话框中填写程序名称,点击“OK”退出对话框。6图4三、添加文件至camera文件下,包括“DirectShow”文件夹、“CameraDS.cpp”和“CameraDS.h”。图5四、将工程文件的树形结构展开,添加“CameraDS.cpp”至“SourceFiles”,添加“CameraDS.h”至“HeaderFiles”。右键单击“SourceFiles”弹出菜单,选择“AddFiles7toFolder”,弹出窗口,选择“CameraDS.cpp”文件,并确定;同理添加“CameraDS.h”文件。添加后,这两个文件出现在目录树中。图6五、项目配置,Project—Setting…弹出图7所示的对话框,选择“C++”标签页,在“Category”中选择“preprocessor”,在“Additionalincludedirectories”中添加“DirectShow/Include”;选择“Link”标签页,在“Category”中选择“Input”,在“Additionalincludepath”中添加“DirectShow/Lib”;在“Object/librarymodules”中添加“cxcore.libcv.libcvaux.libhighgui.libcvcam.lib”。选择“C++”标签页,在“Category”中选择“PrecompiledHeaders”,修改默认选项为“Automaticuseofprecompiledheaders”。8图7六、编译程序,打开对话框资源,如图8所示。图8七、将“Picture”控件拖入窗口,设置合适的大小,并修改其属性,更改ID为“IDC_PICL”,“IDC_PICR”。9图9八、在“cameraDlg.h”中添加头文件,camerads.h、highgui.h、cv.h。图10九、在CCameraDlg类中(即在cameraDlg.h文件中),添加公共变量。CDC*pDCL,*pDCR;//图形设备环境指针HDChDCL,hDCR;//设备上下文的句柄CRectrectL,rectR;//窗口区域CCameraDScamera;//CCameraDS类的对象CvvImagem_imageL;//左窗口图像数据CvvImagem_imageR;//右窗口图像数据intm_iWidth;//图像宽度intm_iHeight;//图像高度boolm_bCameraOpen;//判断图像是否已经打开,标志变量10intcam_count;//摄像头数目boolm_bImageShow;//图像是否正在显示图11十、对上述定义的部分变量进行初始化,初始化放在构造函数中。m_iWidth=320;m_iHeight=240;m_bCameraOpen=false;m_bImageShow=false;图12十一、添加按钮,实现查找摄像头,并对摄像头进行初始化。voidCCameraDlg::OnOpenCamera(){//将代码添加到这个函数中}11图13voidCCameraDlg::OnOpenCamera(){if(m_bCameraOpen){return;}cam_count=CCameraDS::CameraCount();if(!cam_count){MessageBox(未查找到摄像头!,,MB_ICONINFORMATION);}else{//获取所有摄像头的名称CStringstr;for(inti=0;icam_count;i++){charcamera_name[1024];intretval=CCameraDS::CameraName(i,camera_name,12sizeof(camera_name));if(retval0){str.Format(编号为%d摄像机的名字为%s,i,camera_name);//MessageBox(str,,MB_ICONINFORMATION);}else{str.Format(不能获得编号为%d摄像机的名字,i);MessageBox(str,,MB_ICONINFORMATION);}}//左边显示窗口设置关联pDCL=GetDlgItem(IDC_PICL)-GetDC();hDCL=pDCL-GetSafeHdc();GetDlgItem(IDC_PICL)-GetClientRect(&rectL);//右边显示窗口设置关联pDCR=GetDlgItem(IDC_PICR)-GetDC();hDCR=pDCR-GetSafeHdc();GetDlgItem(IDC_PICR)-GetClientRect(&rectR);if(!camera.OpenCamera(0,0,320,240)){MessageBox(不能打开摄像头!,,MB_ICONINFORMATION);}else{MessageBox(摄像头初始完毕!,,MB_ICONINFORMATION);m_bCameraOpen=true;13}}}十二、添加多线程函数,实现图像的采集和处理。图14UINTCCameraDlg::ReceiveThread(void*param){CCameraDlg*pDlg=(CCameraDlg*)param;while(1){if(!pDlg-m_bImageShow){return0;}//获取一帧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));//可以添加一个函数用于图像处理,将处理后的结果显示在右边窗口//图像处理函数到添加这里14//右边显示窗口,显示处理后的图像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);}return0;}十三、为按钮“显示图像”添加函数,调用线程函数。voidCCameraDlg::OnImageShow(){if(!m_bCameraOpen){return;}m_bImageShow=true;AfxBeginThread(ReceiveThread,this);}图15十四、添加“停止显示”按钮,并为其添加函数。15图16voidCCameraDlg::OnImageStop(){m_bImageShow=false;}十五、由此编译程序,并运行,可以得到17所示的界面,因为没有添加图像处理函数,所以两个窗口得到的画面一致。图17十六、添加图像处理函数。图18voidCCameraDlg::ImageThreshold(char*pImageData,intwidth,intheight,intnChannels,intwidthStep){16char*RImageData,*GImageData,*BImageData;for(inti=0;iheight;i++){for(intj=0;jwidth;j++){RImageData=pImageData+i*widt
本文标题:机器人及视觉技术实验指导书
链接地址:https://www.777doc.com/doc-4623351 .html