資源描述:
《機器視覺矩形與圓檢測》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、.機器視覺課程設(shè)計學(xué)院機電工程學(xué)院專業(yè)機械設(shè)計制造及其自動化(微電子制造專業(yè)方向)年級班別XXXXXXXXXXXXXXXX學(xué)號XXXXXXXXXXXXX學(xué)生姓名XXXXXXXXX指導(dǎo)教師XXXXXXXXX2015年1月18日...1問題描述1.1基本目標(biāo)顯示一張圖片(包含一個矩形或一個圓),測量矩形的長寬或圓的直徑。完成得及格分,擴展有加分!要求圖片1.2基本要求“機器視覺”考試結(jié)果要求獨立在計算機上完成,建議使用VisualC++和OpenCV實現(xiàn)一個具有視覺捕捉、圖像顯示、尺寸測量等功能的對話框程序,其中必須完成對圓盤形零件圓心與直徑和矩形零件長與寬尺寸測量內(nèi)容。在教師提供的基本框架程
2、序基礎(chǔ)上,修改、補充界面和功能。2程序及其算法2.1檢測與計算圓半徑的程序思路:從圖片中間橫掃取點得M_Point[0],M_Point[1](x坐標(biāo)相加除2的圓心的x坐標(biāo))中間縱向取點得M_Point[2],M_Point[3](y坐標(biāo)相加除2的圓心的y坐標(biāo))圓上四個點到圓心的距離(半徑)取平均值,輸出為半徑。...顯示圖片程序如下:doublec_DialogTeclarn::f_MakeCircle(doublee_dThreshold){if(NULL==m_pIplImageSource){return0;}//定義變量存圖像的寬,高,行像素intq_iWidth=m_pIplI
3、mageSource->width;intq_iHeight=m_pIplImageSource->height;intq_iWidthStep=m_pIplImageSource->widthStep;uchar*q_pchDataImage=(uchar*)m_pIplImageSource->imageData;CvPointM_Point[4]={};//存放檢索出的四個點循環(huán)檢索//01縱掃for(intCycle_Y=1;Cycle_Yq_pchDataImage[q_iWidth/2+q_iWidth
4、Step*(Cycle_Y-1)]){M_Point[0].x=q_iWidth/2;M_Point[0].y=Cycle_Y;}}...for(intCycle_Y=q_iHeight;Cycle_Y>1;Cycle_Y--){if(e_dThreshold>q_pchDataImage[q_iWidth/2+q_iWidthStep*(Cycle_Y-1)]){M_Point[1].x=q_iWidth/2;M_Point[1].y=Cycle_Y;}}for(intCycle_X=1;Cycle_Xq_pchD
5、ataImage[Cycle_X+q_iWidthStep*(q_iHeight/2-1)]){M_Point[2].x=Cycle_X;M_Point[2].y=q_iHeight/2;}}for(intCycle_X=q_iWidth;Cycle_X>1;Cycle_X--){if(e_dThreshold>q_pchDataImage[Cycle_X+q_iWidthStep*(q_iHeight/2-1)]){M_Point[3].x=Cycle_X;M_Point[3].y=q_iHeight/2;}}for(inti=0;i<4;i++)//畫邊界圓{cvCircle(m_pI
6、plImageSource,M_Point[i],8,cvScalarAll(127),2);}intRidius=0,clear=0;intcircle_y=abs(M_Point[1].y+M_Point[0].y)/2;intcircle_x=abs(M_Point[3].x+M_Point[2].x)/2;...floatc=0,j=0;for(inti=0;i<4;i++){j=(M_Point[i].x-circle_x)*(M_Point[i].x-circle_x)+(M_Point[i].y-circle_y)*(M_Point[i].y-circle_y);c=c+sq
7、rt(j);}Ridius=c/4;//在窗口中顯示長和高charch1[10],ch2[10];itoa(Ridius,ch1,10);itoa(clear,ch2,10);SetDlgItemText(IDC_LONG,ch1);SetDlgItemText(IDC_SHORT,ch2);CWnd*e_pCWndPicture=this->GetDlgItem(ID_PICTURE_DISPLAY);f_Contro