OpenCV和MFC結(jié)合編程例子新_第1頁
OpenCV和MFC結(jié)合編程例子新_第2頁
OpenCV和MFC結(jié)合編程例子新_第3頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、下面是一個(gè)簡(jiǎn)潔的應(yīng)用opencv和mfc 結(jié)合編程的例子。(1 )建立一個(gè)基于 dialog 的 mfc 工程 opencv_dlg1,在頭文件 opencv_dlg1dlg.h 中加入“#include <cv.h>”,“#include <highgui.h>”宏命令語句。(2 )添加picture 控件,id 號(hào)為idc_show_window,圖像將顯示在該控件中。(3 )給copencv_dlg1dlg類添加成員變量: 變量類型:iplimage變量名字:*m_cvimage 屬性為:public并在構(gòu)造函數(shù)copencv_dlg1dlg :copencv_d

2、lg1dlg ()中將其初始化為 null , 即添加“m_cvimage=null ;語句。(4 )opencv 有現(xiàn)成的函數(shù)cvshowimage ()來顯示圖像,但用該函數(shù)顯示圖像是卻是另外開拓了一個(gè)彈出窗口并在其中顯示,為了在我們建立的 picture 控件中顯示圖像,需在 copencv_dlg1dlg 類中添加成員函數(shù)函數(shù)類型:void函數(shù)名稱drawpictohdc(iplimage *img, uint id) 屬性設(shè)置為publicdrawpictohdc ()函數(shù)代碼為:/-void copencv_dlg1dlg:drawpictohdc(iplimage *img, u

3、int id)cdc *pdc = getdlgitem(id)->getdc();(5)添加 button 按鈕,id 號(hào)為 idc_read_pic,標(biāo)題為“讀圖”,用于打開一幅圖片。對(duì)該按鈕添加消息響應(yīng)函數(shù)(雙擊)onreadpic():/-void copencv_dlg1dlg:onreadpic()/ todo: add your control notification handler code here cstring open_filename;cfiledialog fdlg(true,“bmp“,“*.bmp“,ofn_hidereadonly|ofn_overwr

4、iteprompt,“原始圖像(*.bmp)|*.bmp|全部文件(*.*)|*.*|“,null);if (fdlg.domodal() = true)open_filename = fdlg.getfilename();hdc hdc= pdc->getsafehdc(); crect rect;cwnd * pwnd; pwnd=getdlgitem(id);pwnd->setwindowpos( null,0,0,img->width,img->height,swp_nozorder | swp_nomove );pwnd->getclientrect(&

5、amp;rect);/以下是把 iplimage * 轉(zhuǎn)到能夠在 view 里面畫的關(guān)鍵cvvimage cimg;cimg.copyof(img); cimg.drawtohdc(hdc,&rect); releasedc(pdc);/=if(m_cvimage) cvreleaseimage(&m_cvimage);m_cvimage = cvloadimage(open_filename,1);if (m_cvimage=0) messagebox(“reading failed“); elsedrawpictohdc(m_cvimage, idc_show_window

6、);/=至此,運(yùn)行程序,當(dāng)點(diǎn)擊“讀圖”按鈕時(shí),會(huì)彈出對(duì)話框,提示用戶選擇需要讀入的圖片,“確定”后程序便會(huì)在 picture 控件中將圖片顯示出來。(6) 添加 edit 控件,id 號(hào)為 idc_edit_th,應(yīng)用向?qū)Чぞ?mfc classwizard 給該 id 添加 int 型的成員變量 m_th.通過 edit 控件 idc_edit_th,用戶可以輸入圖像分割閾值,程序會(huì)將其自動(dòng)更新到 m_th.vlaue,int,最大最小 1,255(7) 添加 button 按鈕,id 號(hào)為 idc_threshold,標(biāo)題為“閾值分割”,點(diǎn)擊它將對(duì)業(yè)已打開的圖片做二值化分割。對(duì)該按鈕添加消

7、息響應(yīng)函數(shù)onthreshold():/-void copencv_dlg1dlg:onthreshold()/ todo: add your control notification handler code here updatedata(true);%更新if (m_cvimage=null)%假如為空就提示messagebox(“no source image found!“,“warning“); elseiplimage* dst=cvcreateimage( cvsize(m_cvimage->width,m_cvimage->height), m_cvimage-&

8、gt;depth, m_cvimage->nchannels );cvthreshold( m_cvimage, dst, m_th, 255, cv_thresh_binary);/原型:void cvthreshold( iplimage* src, iplimage* dst, float thresh, float maxvalue,cvthreshtype type);drawpictohdc(dst, idc_show_window);/cvnamedwindow(“threshold“); /設(shè)置窗口名稱/cvshowimage(“threshold“,dst); /顯示圖

9、片/cvwaitkey(0);/=至此,當(dāng)點(diǎn)擊“讀圖”按鈕打開一幅圖片,該圖片將在picture 控件中顯示;在edit 控件idc_edit_th 中輸入閾值,并點(diǎn)擊“閾值分割”按鈕,則對(duì)讀入的圖像做二值化處理,處理結(jié)果在一個(gè)新彈出窗口中顯示。% 邊緣提取laplace 算子(1)添加 button 按鈕,id 號(hào)為 idc_laplace,標(biāo)題為“l(fā)aplace 算子”。對(duì)該按鈕添加消息響應(yīng)函數(shù) onlaplace():程序:void copencv_dlg1dlg: onlaplace ()/ todo: add your control notification handler cod

10、e here updatedata(true);%更新if (m_cvimage=null)%假如為空就提示messagebox(“no source image found!“,“warning“); elseiplimage*laplace=cvcreateimage(cvgetsize(m_cvimage),ipl_depth_16s,3); cvlaplace(m_cvimage,laplace,7);/原型:void cvlaplace( const cvarr* src, cvarr* dst, int aperture_size);drawpictohdc(laplace, id

11、c_show_window);/cvnamedwindow(“l(fā)aplace“); /設(shè)置窗口名稱/cvshowimage(“l(fā)aplace“,dst); /顯示圖片/cvwaitkey(0);canny 算子(6)添加 edit 控件,id 號(hào)為 idc_edit_th1,應(yīng)用向?qū)Чぞ?mfc classwizard 給該id 添加 int 型的成員變量 m_th1.(7)添加 edit 控件,id 號(hào)為 idc_edit_th2,應(yīng)用向?qū)Чぞ?mfc classwizard 給該id 添加 int 型的成員變量 m_th2.(8)添加 button 按鈕,id 號(hào)為 idc_canny,標(biāo)

12、題為“canny 算子”。對(duì)該按鈕添加消息響應(yīng)函數(shù) oncanny():/-void copencv_dlg1dlg:oncanny()/ todo: add your control notification handler code here updatedata(true);%更新if (m_cvimage=null)%假如為空就提示messagebox(“no source image found!“,“warning“); else灰度化處理iplimage * image_gray= cvcreateimage(cvgetsize(m_cvimage), ipl_depth_8u,

13、1); cvcvtcolor(m_cvimage,image_gray,cv_bgr2gray);iplimage* canny=cvcreateimage(cvgetsize(image_gray),ipl_depth_8u,1); cvcanny(image_gray, canny, m_th1, m_th2, 3);/原型:void cvcanny( const cvarr* image, cvarr* edges, double threshold1, double threshold2, int aperture_size );drawpictohdc(canny, idc_show

14、_window);/=% harris 算子(8)添加button 按鈕,id 號(hào)為 idc_harris,標(biāo)題為“harris 算子”。對(duì)該按鈕添加消息響應(yīng)函數(shù) onharris():/-void copencv_dlg1dlg:onharris()/ todo: add your control notification handler code here updatedata(true);%更新if (m_cvimage=null)%假如為空就提示messagebox(“no source image found!“,“warning“); else至此,當(dāng)點(diǎn)擊“讀圖”按鈕打開一幅圖片,

15、該圖片將在picture 控件中顯示;在edit 控件idc_edit_th 中輸入閾值,并點(diǎn)擊“閾值分割”按鈕,則對(duì)讀入的圖像做二值化處理,處理結(jié)果在一個(gè)新彈出窗口中顯示?;叶然幚韎plimage* image_gray= cvcreateimage(cvgetsize(m_cvimage), ipl_depth_8u,1);cvcvtcolor(m_cvimage,image_gray,cv_bgr2gray);iplimage*dst= cvcreateimage(cvgetsize(image_gray), ipl_depth_8u,1);cvconvertimage(img,dst,cv_cvtimg_flip);iplimage* harris=cvcreateimage(cvgetsize(image_gray),ipl_depth_32f,1); cvcornerharris(image_gray, harris, 3,5,0.04);/原型:void cvcanny( const cvarr* image, cvarr* edg

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論