版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、机器视觉课程设计对圆盘形零件I心与直径和矩形零件长与宽尺寸测量学生学院专业班级学 号学生指导教师2015年1月20日问题描述51. 1基本目标51.2基本要求5程序及其算法52.1检测与计算圆半径的程序52.2检测与计算矩形长和宽的程序82. 2. 1打开摄像头程序82.2.2保存拍摄的照片程序92. 2. 3读取拍摄到的图片(读取文名字Current Image, jpg的图片)92.2.4检测边上的点和计算长和高的函数92.2.5老师写的显示图片的函数13运行结果14小结151问题描述1.1基本目标显示一图片(包含一个矩形或一个圆),测量矩形的长宽或圆的直径。完成得及格 分,扩展有加分!要
2、求图片1.2基本要求“机器视觉”考试结果要求独立在计算机上完成,建议使用Visual C+和OpenCV 实现一个具有视觉捕捉、图像显示、尺寸测量等功能的对话框程序,其中必须完成对圆 盘形零件圆心与直径和矩形零件长与宽尺寸测量容。在教师提供的基本框架程序基础 上,修改、补充界面和功能。2程序及其算法2.1检测与计算圆半径的程序思路:从图片中间横扫取点得M_Point0, M_Pointl (x坐标相加除2的圆心的x 坐标)中间纵向取点得M_Point2, M_Point3 (y坐标相加除2的圆心的y坐标) 圆上四个点到圆心的距离(半径)取平均值,输出为半径。显示图片程序如下:double c
3、DialogTeclarn:f MakeCircle(double e dThreshold)if(NULL=m_pIplImageSource)return 0;定义变量存图像的宽,高,行像素int q_iWidthz:m_pIplImageSource-width;int q_iHeight=m_pIplImageSource-height;int q_iWidthStep=m_pIpl ImageSource-widthStep;uchar *q_pchDataImage=(uchar *)m_pIp11mageSource-imageData:CvPoint M_Point4 = ;/
4、存放检索出的四个点 循环检索/01纵扫for(int Cycle_Y=l;Cyc1e Yq_pchDataImageq_iWidth/2+q_iWidthStep*(Cycle_Y-l)J) NLPoint0.x=q_iWidth/2;M Point01. y=Cycle Y;3for(int cyclelYuq_iHeight;cycleYl;Cycle YI)亠if (edThreshold尸 pchDat 巴 mage尸 iwidth、2+Fiwidthstep*(cycleY1)M Point = x=qiwidth、2M PointLl yucycle Y八)for (i nt Cy
5、cle xul 八 Cycle xqiwidthnyclex+)亠if(eldThresholdq_pchDataImagecyclelx+尸iwidrhstep*(qliHeight、2丄)M Point2 xucyclelx;M Point2,- yuqiHeight2”)for (i nt Cycle XHqiwid thnycl ex1 Cycle XI)亠rdThreshold尸 pchDat 巴magecyclex2iwidthstep*(qHeight、2 丄) (M Point3 xucyclelx一M Point 一3- y=qiHeight、2)(intH-?i4“ i+)
6、、画娱初El3cvCircle(m_plplImageSource,M_Pointi,8,cvScalarAl1 (127),2);int Ridius=Otclear=O;int c i rc1e_y=abs(M Po i n111J. y+M Point I 0. y)/2;int circ1e_x=abs(M Point3. x+M Point2. x)/2;float c=0,j=0;for (int i=0;iGetDlgItem(ID PICTURE DISPLAY);fContro1ShowImage(m_pIplImageDisplay,e_pCWndPicture,m_pIp
7、lImageSource); cvSavelmage( T(/Result_Image jpg),m_plplImageSource);return 0;2.2检测与计算矩形长和宽的程序思路:这个程序主要包括:打开摄像头-一保存图片(拍照)-一加载刚刚保存的图 片-一找出点并计算长和高四个按钮,每一个按钮包含下面的一段代码,拍摄的图片保 存为Currentimage, jpg,这里事先保存了一同名的图片,所以可以直接点击Load Image 读取。2.2.1打开摄像头程序void c DialogTec1arn:OnBnC1ickedButtonOpenCamera()CvCapture *q
8、 pCvCapture=cvCreateCameraCapture(0);if(NULL=q pCvCapture)return;IplImage *q plplImageCapturecvQueryFrame(q pCvCapture):if(NULL=q plplImageCapture)return;if(NULL!=m plplImageSource)cvReleaseImage(&m plplImageSource);m pIp1ImageSource=NULL;m_pIplImageSource=cvCloneImage(q_plplImageCapture);cvReleaseC
9、apture(&q pCvCapture);CWnd *e pCWndPicture=this-GetDlgItem仃D PICTURE DISPLAY);f ContiolShowImage(m pIplImageDisplay,e pCWndPicture,m plplImageSource);注:绿色的为检测是否成功打开摄像头,蓝色的是读取摄像头拍摄的图片到存,后面的语句是让图片在mfc窗口显示出来。2.2.2保存拍摄的照片程序void c DialogTeclarn:0nBnClickedButtonSavelmage()/ TODO:在此添加控件通知处理程序代码cvSaveImage
10、 (_T(ff. /CurrentImage jpg”),m_plplImageSource);2. 2. 3读取拍摄到的图片(读取文名字Currentimage, jpg的图片)void c DialogTeclarn:OnBnCickedButtonLoadlmageO/ TODO:在此添加控件通知处理程序代码if(NULL!=m_pIplImageSource)(cvReleaseImage(&m plplImageSource);m plplImageSource二NULL;m_pIplImageSource=cvLoadImageCT(. /CurrentImage jpg),0);
11、CWnd *e pCWndPicture=this-GetDIgltem(ID PICTURE DISPLAY):f ControlShowImage(m plplImageDisplay,e pCWndPicture,m plplImageSource);2.2.4检测边上的点和计算长和高的函数思路是:第一步找到边上的点,设定一个变量eJThreshold值为127,通过循环让 它与每一个像素的像素值进行企軌疝果芹测到一个点的像素值比127小,则这个点可 能就是需要的点(黑色=o,白制別如每个像素都要比较运算太多,所以上边两个 、X3, Y3,1 /点的检测是沿着图片长的的2/5分处和3/5
12、分处向下检测,下边的点是沿着1/2处向上 检测。第二步是用找到6个点的坐标算出三角形的面积,然后除以底边边长得到高。求 三角形的面积用的是行列式的值等于三角形面积的2倍程序如下:double c DialogTeclarn::f MakeRectangleWidth(double e dThreshold)/ TODO:在此添加控件通知处理程序代码定义一些点和变量int q iWidth-m plplImageSource-width;int q iHeight=m plp1ImageSource-height;int q iWidthStep二m plplImageSource-widthS
13、tep;uchar *q pchDataImage=(uchar *)m pIp11mageSource-imageData:intiXLeftTop=2*q_iWidth/5:int q iXRightTop=3*q iWidth/5;int q iXBottom=q iWidth/2;int q iYLeftTop=2*q_iHeight/5;int q iYLeftBottom=3*q iHeight/5;int q iYRightMid=q_iHeight/2;CvPoint q CvPointLeftTop,q CvPointRightTop,q CvPointBottom:CvPo
14、int q CvPointLeft Top,q CvPointRight Mid,q CvLeft Bottom:/求上下两边上的点,3个循环for(int cuiCycleHeight=O;q_iCycleHeightq_pchDataImageq_iCycleHeight*q_iWidthStep+q_iXLeftTopl)q_CvPointLeftTop. x=jiXLeftTop;q_CvPointLeftTop. y=jiCyc 1 eHeight; break;for(int q iCycleHeight=O;q iCycleHeightq pchDatalmageEq iCycl
15、eHeight*q iWidthStep+q iXRightTop)q CvPointRightTop. x=q iXRightTop;q CvPointRightTop y=q iCycleHeight; break;for(int q iCycleHeight=q iHeightT;q iCycleHeight=0;q iCycleHeight-)if(e dThresholdq pchDatalmageEq iCycleHeight*q iWidthStep+q iXBottom)q CvPointBottomx二q iXBottom;q CvPointBottomy二q iCycleH
16、eight;break;求左右两边上的点,3个循环for(int q iCycleWidth=0;q_iCycleWidthq pchDatalmageEq_iCycleWidth+q iWidthStep*(q iYLeftTop-1)q CvPointLeft Top. x=q_iCycleWidth;q_CvPointLeft一Top. y=q iYLeftTop; break;for(int q iCycleWidth=O;q iCycleWidthq pchDataImageq_iCycleWidth+q iWidthStep*(q iYLeftBottom-1) q CvLeft
17、Bottom. x=q iCycleWidth;q CvLeft Bottomy二q iYLeftBottom;break;for(int q iCycleWidth=q iHeight-1;q_iCycleWidth=0;q iCycleWidth-)if(e dThresholdq pchDatalmagetq iCycleWidth+q iWidthStep*(q iYRightMid-1)q CvPointRight Mid. x=q iCycleWidth;q CvPointRight Mid. y=q iYRightMid;break;在检测到的点上画圆,只是为了更好看到找点的情况
18、cvCircle(m pIp11mageSourcetq CvPointLeftTop,5,cvScalarAll(127),2);cvCircle(m pIplImageSource,q CvPointRightTop,5tcvScalarAl1(127).2);cvCircle(m plplImageSource,q CvPointBottom,5,cvScalarAU(127),2):cvCircle(m plplImageSource,q CvPointLeft Top.5tcvScalarAl1(127),2);cvCircle(m plplImageSource,q CvLeft
19、Bottom,5,cvScalarAll(127),2);cvCircle(m plplImageSource,q CvPointRight Mid,5tcvScalarAl1(127),2):/显不画圆后的图片CWnd *epCWndPicture=this-GetDlgItem(ID PICTURE.DISPLAY);f ControlShowimage(m plplImageDisplayte pCWndPicture,m plplImageSource):计算长和高的像素值,三角形3点的坐标构成行列式,行列式的值二2*面积,行列式的值/底边二高CvMat Ma;int HIGH,WID
20、E;float Area;int a=q CvPointLeftTopx-q CvPointRightTopx;int b=q CvPointLeftTopy-q CvPointRightTopy;double c=a*a+b*b;定义行列式doub1earr9 = q CvPointLeftTop. x.q CvPointLeftTop. y,l,q CvPointRightTop. xtq CvPointRightTop.y,1,q CvPointBottom x,q CvPointBottom y,1;cvlnitMatHeader(&Ma,313,CV. 64FCl,arr);Area
21、=abs(cvDet(&Ma);HIGH=Area/sqrt(c);int A=q CvPointLeft_Topx-q_CvLeft Bottomx;int B=q CvPointLeft Top. y-q CvLeft Bottom, y;double C=A*A+B*B;定义行列式DoubleARR9 = q CvPointLeft_Top. x,q CvPointLeft Top. y,ltq_CvLeft Bottom. xtq CvLeft Bottom, y,1,q CvPointRightid. x,q_CvPointRi(?ht_Mid. y, 1;cvInitMatHead
22、er(&Ma,3t 3,CV 64FC1,ARR):Area=abs(cvDet(&Ma);WIDE=Area/sqrt(C);/在窗口中显示长和高char chi10,ch210;itoa(HIGH,chl,10);itoa(WIDE,ch2,10);SetDlgltemText(IDC LONG,chi):SetDlgltemText(IDC_SHORT.ch2);cvSaveImage( T(w./Result Imagejpgn),m plplImageSource):return 0;/调用上面的函数进行检测点和计算长和高的值,点击第四个按钮会调用这段程序,当 里面的函数调用时,它会
23、调用上面那段函数void c DialogTeclarn::OnBnClickedButtonRectangle0/ TODO:在此添加控件通知处理程序代码f_MakeRec t ang1eW i d t h();2.2.5老师写的显示图片的函数voidc DialogTeclarn:f Contro1ShowImage(Ip11mage水&e plplImageShow,CWnd*e pCWndControl, IplImage *e plplImageSource)i f(NULL=e pCWndControl) (NULL=e plplImageSource)return;CRect q
24、 CRectControl;e pCWndCon t ro1- Xie tC1i en t Rec t(&q CRectControl):if(NULL!=e plplImageShow)cvReleaseImage(&e plplImageShow);e plplImageShow二NULL;e pIp1ImageShow=cvCreateImage(cvSize(q CRectContro1. Width(),q CRectContro1. Height(),IPL DEPTH_8Ute plplImageSource-nChannels):cvResize(e plplImageSour
25、ce,e plplImageShow):HDC q_HDCControl=e pCWndControl-GetDC()-GetSafeHdc ();unsigned int q piBuffersizeof(BIWPINFOHEADER) +sizeof(RGBQUAD)*256:BITMAPINFO *e_pBITMAPINFODisplay=(BITMAPINFO *)qpiBuffer;BITMAPINFOHEADER *e pBITMAPINFOHEADERDisp1ay=&(e pBITMAPINFODisplay-bmiHeader);memset(e pBITMAPINFOHEADERDisplay,0.sizeof(*e pBITMAPINFOHEADERDisplay):e pBITMAPINFOHEADERDisplay-biSize=sizeof(BITOPINFOHEADER);3e pBITMAPINFOHEADERDisplay-biWidth=e plpl ImageShow-width;e pBITMAPINFOHEADERDisp1ay-biHeight=-e plpl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 吉林艺术学院《素描Ⅰ》2021-2022学年第一学期期末试卷
- 吉林艺术学院《电影剧作构成》2021-2022学年期末试卷
- 2024年公寓租赁消防合同范本
- 2024年大型园林转让合同范本
- 2024年大批油罐车转让协议书模板
- 2022年公务员多省联考《申论》真题(黑龙江省市卷)及答案解析
- 2022年内蒙古省公务员录用考试《行测》真题及答案解析
- 2022年公务员多省联考《申论》真题(宁夏C卷)及答案解析
- 吉林师范大学《世界现代史》2021-2022学年第一学期期末试卷
- 吉林师范大学《国画技法训练》2021-2022学年第一学期期末试卷
- 【燃气规范】家用燃气燃烧器具安装及验收规程(CJJ12-2013)
- 防火门窗施工方案
- 土方填筑碾压试验报告
- 《工程计量报验单》
- 小学文言文实词虚词总结(共16页)
- 资本的剩余价值
- 《建筑起重吊装工程安全技术规程》JGJ276
- 黑龙江小学五年级第5单元第4课第3节_《就英法联军远征中国给巴特勒上尉的信》
- T∕CREA 005-2021 老年人照料设施与适老居住建筑部品体系标准
- BlueCat核心服务保障专家
- (完整版)矿用支护材料抽检管理制度
评论
0/150
提交评论