

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、原图二值化后的图像轮廓提取后图像/柔性实训Dlg.cpp:implementationfile/#include"stdafx.h"#inelude"柔性实训.h"#include"柔性实训Dlg.h"#include"opencv2.h"#include"dib.h"#include"math.h"/sqtrpow#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE=_FILE_;#endif/C
2、AboutDlgdialogusedforAppAboutclassCAboutDlg:publicCDialogpublic:CAboutDlg();/DialogData/AFX_DATA(CAboutDlg)enumIDD=IDD_ABOUTBOX;/AFX_DATA/ClassWizardgeneratedvirtualfunctionoverrides/AFX_VIRTUAL(CAboutDlg)/DDX/DDVsupportprotected:virtualvoidDoDataExchange(CDataExchange*pDX);/AFX_VIRTUAL/Implementati
3、onprotected:/AFX_MSG(CAboutDlg)/AFX_MSGDECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg():CDialog(CAboutDlg:IDD)/AFX_DATA_INIT(CAboutDlg)/AFX_DATA_INITvoidCAboutDlg:DoDataExchange(CDataExchange*pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CAboutDlg)/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CAboutDlg,CDialog)/AFX_MSG
4、_MAP(CAboutDlg)/Nomessagehandlers/AFX_MSG_MAPEND_MESSAGE_MAP()/CMyDlgdialogCMyDlg:CMyDlg(CWnd*pParent/*=NULL*/):CDialog(CMyDlg:IDD,pParent)/AFX_DATA_INIT(CMyDlg)m_Radius=0;m_Shape=_T("");m_Length=0;m_Width=0;m_circle0102=0.0f;m_circle0101=0.0f;m_circel0103=0.0f;m_circel0201=0.0f;m_circel02
5、02=0.0f;m_circel0203=0.0f;m_circel0301=0.0f;m_circel0302=0.0f;m_circel0401=0.0f;m_circel0402=0.0f;m_circel0403=0.0f;/AFX_DATA_INIT/NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);voidCMyDlg:DoDataExchange(CDataExchange*pDX)CDialog:DoDataExch
6、ange(pDX);/AFX_DATA_MAP(CMyDlg)DDX_Text(pDX,IDC_RADIUS,m_Radius);DDX_Text(pDX,IDC_SHAPE,m_Shape);DDX_Text(pDX,IDC_CIRCLE0102,m_circle0102);DDX_Text(pDX,IDC_CIRCLE0101,m_circle0101);DDX_Text(pDX,IDC_CIRCLE0103,m_circel0103);DDX_Text(pDX,IDC_CIRCLE0203,m_circel0203);DDX_Text(pDX,IDC_CIRCLE0301,m_circe
7、l0301);DDX_Text(pDX,IDC_CIRCLE0302,m_circel0302);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CMyDlg,CDialog)/AFX_MSG_MAP(CMyDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_CALCULATION,OnCalculation)ON_EN_CHANGE(IDC_SHAPE,OnChangeShape)/AFX_MSG_MAPEND_MESSAGE_MAP()/CMyDlgmessagehandlersB
8、OOLCMyDlg:OnInitDialog()CDialog:OnInitDialog();/Add"About."menuitemtosystemmenu./IDM_ABOUTBOXmustbeinthesystemcommandrange.ASSERT(IDM_ABOUTBOX&0xFFF0)=IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX<0xF000);CMenu*pSysMenu=GetSystemMenu(FALSE);if(pSysMenu!=NULL)CStringstrAboutMenu;strAboutMenu.Loa
9、dString(IDS_ABOUTBOX);if(!strAboutMenu.IsEmpty()pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);/Settheiconforthisdialog.Theframeworkdoesthisautomatically/whentheapplication'smainwindowisnotadialogSetIcon(m_hIcon,TRUE);/SetbigiconSetIcon(m_hIcon
10、,FALSE);/Setsmallicon/TODO:AddextrainitializationherereturnTRUE;/returnTRUEunlessyousetthefocustoacontrolvoidCMyDlg:OnSysCommand(UINTnID,LPARAMlParam)if(nID&0xFFF0)=IDM_ABOUTBOX)CAboutDlgdlgAbout;dlgAbout.DoModal();elseCDialog:OnSysCommand(nID,lParam);/Ifyouaddaminimizebuttontoyourdialog,youwill
11、needthecodebelow/todrawtheicon.ForMFCapplicationsusingthedocument/viewmodel,/thisisautomaticallydoneforyoubytheframework.voidCMyDlg:OnPaint()if(IsIconic()CPaintDCdc(this);/devicecontextforpaintingSendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0);/CentericoninclientrectangleintcxIcon=GetSystem
12、Metrics(SM_CXICON);intcyIcon=GetSystemMetrics(SM_CYICON);CRectrect;GetClientRect(&rect);intx=(rect.Width()-cxIcon+1)/2;inty=(rect.Height()-cyIcon+1)/2;/Drawtheicondc.DrawIcon(x,y,m_hIcon);elseCDialog:OnPaint();/Thesystemcallsthistoobtainthecursortodisplaywhiletheuserdrags/theminimizedwindow.HCUR
13、SORCMyDlg:OnQueryDragIcon()return(HCURSOR)m_hIcon;voidCMyDlg:OnCalculation()CDibdib,temp;dib.LoadFromFile("14.bmp");temp.LoadFromFile("00.bmp");intHeight=dib.iHeight;/Height为图象高度intWidth=dib.iWidth;/Width为图象的宽度intk=0;for(inti=0;i<Height;i+)/temp二值化for(intj=0;j<Width;j+)*(te
14、mp.m_pBmBits+i*Width+j)=0;for(i=0;i<Height;i+)/dib二值化for(intj=0;j<Width;j+)if(*(dib.m_pBmBits+i*Width+j)>150)*(dib.m_pBmBits+i*Width+j)=255;else*(dib.m_pBmBits+i*Width+j)=0;for(i=1;i<Height-1;i+)/dib提取轮廓for(intj=1;j<Width-1;j+)if(*(dib.m_pBmBits+i*Width+j)=0&&*(dib.m_pBmBits+i
15、*Width+j+1)=255)/从左-右|(*(dib.m_pBmBits+i*Width+j)=0&&*(dib.m_pBmBits+i*Width+j-l)=255)右-左|(*(dib.m_pBmBits+i*Width+j)=0&&*(dib.m_pBmBits+(i+1)*Width+j)=255)右-左|(*(dib.m_pBmBits+i*Width+j)=0&&*(dib.m_pBmBits+(i-1)*Width+j)=255)右-左*(temp.m_pBmBits+i*Width+j)=255;/else/*(dib.m_p
16、BmBits+i*Width+j)=0;dib.SaveToFile("2.bmp");temp.SaveToFile("22.bmp");floatra,ra1=99,ra2=0.5;ra=113;/sqrt(ra1);/检测结果m_Shape=_T("圆");工件的形状m_Radius=264;/圆工件的半径m_circle0102=m_Radius;m_circle0101=ra;m_circel0103=sqrt(ra2);m_circel0203=103;m_circel0301=45;m_circel0302=18;/*f
17、loatm_circel0201;floatm_circel0202;floatm_circel0401;floatm_circel0402;floatm_circel0403;*/UpdateData(false);/(true)voidCMyDlg:OnChangeShape()/TODO:IfthisisaRICHEDITcontrol,thecontrolwillnot/sendthisnotificationunlessyouoverridetheCDialog:OnInitDialog()/functionandcallCRichEditCtrl().SetEventMask()/
18、withtheENM_CHANGEflagORedintothemask./TODO:AddyourcontrolnotificationhandlercodeherevoidCMyDlg:OnButton1()/OpnecV计算usingnamespacecv;constintkvalue=15;/双边滤波邻域大小Matsrc_color=imread("D:141.bmp");读取原彩色图imshow("222",src_color);/声明一个三通道图像,像素值全为0,用来将霍夫变换检测出的圆画在上面Matdst(src_color.size(),
19、src_color.type();dst=Scalar:all(0);Matsrc_gray;彩色图像转化成灰度图cvtColor(src_color,src_gray,COLOR_BGR2GRAY);imshow("src_gray",src_gray);imwrite("src_gray.png",src_gray);Matbf;对灰度图像进行双边滤波bilateralFilter(src_gray,bf,kvalue,kvalue*2,kvalue/2);imshow("double",bf);imwrite("src
20、_bf.png",bf);vectorvVec3f>circles;/声明一个向量,保存检测出的圆的圆心坐标和半径HoughCircles(bf,circles,CV_HOUGH_GRADIENT,1.5,20,130,38,10,50);/霍夫变换检测圆cout<<"x=ty=tr="<<endl;for(size_ti=0;i<circles.size();i+)把霍夫变换检测出的圆画出来Pointcenter(cvRound(circlesi0),cvRound(circlesi1);intradius=cvRound(c
21、irclesi2);circle(dst,center,0,Scalar(0,255,0),-1,8,0);circle(dst,center,radius,Scalar(0,0,255),1,8,0);cout<<cvRound(circlesi0)<<"t"<<cvRound(circlesi1)<<"t"<<cvRound(circlesi2)<<endl;/在控制台输出圆心坐标和半径imshow("shift",dst);imwrite("dst
22、.png",dst);waitKey();return0;/*检测大圆*/HoughCircles(bf,circles,CV_HOUGH_GRADIENT,1.0,50,130,30,10,300);/霍夫变换检测圆/*检测小圆,三个小圆+键槽圆*/HoughCircles(bf,circles,CV_HOUGH_GRADIENT,1.5,20,130,38,10,50);/霍夫变换检测圆/*检测内圆*/SHonyESOI|ICr-.COCDsupport191817HoughQnes(br、cines、CVHOUGHGRADIENT、1.0、30、130、40、100、<h
23、lailsglg-b-J-g-openglMH68臺938帘鼻*它力.PH孚曹曆画内圆轮廓提取图L'Wh*V-X*-iriijCwER'Shmi.lairaJc"T-Hl'-JJTh牡I”.幵flrutMlveiVA廿JFjjtMi*s3ttli7|UiACIA3ia«i卩丑Bbl爭IflWhfi'i;nr1JI|>显示界面closeall,clearallI=imread('C:UsersliuxiaodongDesktop14.bmp');H,T,R=hough(BW);xlabel('theta'),ylabel('rho');axison,axisnormal,holdon;P=houghpeaks(H,5,'threshold',ceil(0.3*max(H(:);x=T(P(:,2);y=R(P(:,1);plot(x,y,'s','color','white');%Findlinesandplotthemlines=houghlines(BW,T,R,P,'FillGap',5,'Mi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 各国主要节假日及其习俗介绍表
- 校园里的记忆叙事作文(4篇)
- 我的理想职业对成为一名医生的憧憬话题作文10篇范文
- 填埋场环境现状与污染源分析
- 新型材料市场研究表
- 读西游记后感悟初中作文12篇范文
- Python大数据分析与挖掘实战:微课版(第2版)课件 第5章 数据预处理与特征工程
- 水资源优化调配合同
- 人力资源管理行业在职表现证明(5篇)
- 高性能计算机系统维护规程
- 北京东城五中2025届高三(最后冲刺)历史试卷含解析
- 房产自愿转让协议书
- 初中物理神奇的电磁波+物理教科版九年级下册
- 2024年中考地理真题(带答案)
- GB/T 718-2024铸造用生铁
- 人力资源管理体系设计全案
- 八年级地理会考复习知识点
- 屠户吹狼阅读答案
- 《多联机空调系统工程技术规程》JGJ174-2024
- GJB3206B-2022技术状态管理
- SYT 6883-2021 输气管道工程过滤分离设备规范-PDF解密
评论
0/150
提交评论