




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Visual Studio2010在MFC中用opencv實現對視頻中動態(tài)目標的追蹤第二步,建立一個MFC的對話框程序,做兩個按鈕,一個“打開視頻文件”,一個“運動跟蹤處理”。具體操作:1 建立MFC對話框程序的框架:File -New - MFC AppWizard(exe),選取工程路徑,并取工程名“VideoProcesssing”- Next - 選擇Dialog based后,去掉使用Unicode庫的勾,選擇在靜態(tài)庫中使用 MFC,點Finish,點OK.2 添加按鈕:直接Delete掉界面默認的兩個“確定”“取消”按鈕。然后添加兩個button,分別名為“打開視頻”,“運動跟蹤處
2、理”,其ID分別設為IDC_OPEN_VIDEO,IDC_TRACKING.3 添加消息響應函數:雙擊按鈕“打開視頻文件”,自動生成響應函數名OnOpenVideo,點Ok。然后添加如下代碼:CFileDialog dlg(true,*.avi,NULL,NULL,*.avi|*.avi|);if (dlg.DoModal()=IDOK)strAviFilePath = dlg.GetPathName();elsereturn;同樣,雙擊“運動跟蹤處理”按鈕,選擇默認的響應函數名,然后添加代碼:/聲明IplImage指針I(yè)plImage* pFrame = NULL;IplImage* pFr
3、Img = NULL;IplImage* pBkImg = NULL;CvMat* pFrameMat = NULL;CvMat* pFrMat = NULL;CvMat* pBkMat = NULL;CvCapture* pCapture = NULL;int nFrmNum = 0;/打開AVI視頻文件if(strAviFilePath=) /判斷文件路徑是否為空MessageBox(請先選擇AVI視頻文件!);return;elseif(!(pCapture = cvCaptureFromFile(strAviFilePath)MessageBox(打開AVI視頻文件失敗!);retur
4、n;/創(chuàng)建窗口cvNamedWindow(Video, 1);cvNamedWindow(Background,1);cvNamedWindow(Foreground,1);/使窗口有序排列,窗口寬330cvMoveWindow(Video, 30, 0);cvMoveWindow(Background, 360, 0);cvMoveWindow(Foreground, 690, 0);/逐幀讀取視頻while(pFrame = cvQueryFrame( pCapture )nFrmNum+;/如果是第一幀,需要申請內存,并初始化if(nFrmNum = 1)pBkImg = cvCreat
5、eImage(cvSize(pFrame-width, pFrame-height), IPL_DEPTH_8U,1); / 存放背景圖像(灰度)pFrImg = cvCreateImage(cvSize(pFrame-width, pFrame-height), IPL_DEPTH_8U,1); / 存放中間圖像(灰度)pBkMat = cvCreateMat(pFrame-height, pFrame-width, CV_32FC1);pFrMat = cvCreateMat(pFrame-height, pFrame-width, CV_32FC1);pFrameMat = cvCrea
6、teMat(pFrame-height, pFrame-width, CV_32FC1);/轉化成單通道圖像再處理(灰度)cvCvtColor(pFrame, pBkImg, CV_BGR2GRAY);cvCvtColor(pFrame, pFrImg, CV_BGR2GRAY);cvConvert(pFrImg, pFrameMat);cvConvert(pFrImg, pFrMat);cvConvert(pFrImg, pBkMat);elsecvCvtColor(pFrame, pFrImg, CV_BGR2GRAY); /轉化成單通道圖像再處理(灰度)cvConvert(pFrImg,
7、 pFrameMat);/高斯濾波先,以平滑圖像/cvSmooth(pFrameMat, pFrameMat, CV_GAUSSIAN, 3, 0, 0);/當前幀跟背景圖相減(求背景差并取絕對值)cvAbsDiff(pFrameMat, pBkMat, pFrMat);/二值化前景圖(這里采用特定閾值進行二值化)cvThreshold(pFrMat, pFrImg, 60, 255.0, CV_THRESH_BINARY);/進行形態(tài)學濾波,去掉噪音cvErode(pFrImg, pFrImg, 0, 1);cvDilate(pFrImg, pFrImg, 0, 1);/滑動平均更新背景(求
8、平均)cvRunningAvg(pFrameMat, pBkMat, 0.003, 0);/將背景轉化為圖像格式,用以顯示cvConvert(pBkMat, pBkImg);/ 保持原圖像的旋轉方向pBkImg-origin = pFrImg-origin = pFrame-origin;/顯示圖像cvShowImage(Video, pFrame);cvShowImage(Background, pBkImg);cvShowImage(Foreground, pFrImg);/如果有按鍵事件,則跳出循環(huán)/此等待也為cvShowImage函數提供時間完成顯示/等待時間可以根據CPU速度調整if
9、( cvWaitKey(200) = 0 )break;/銷毀窗口cvDestroyWindow(Video);cvDestroyWindow(Background);cvDestroyWindow(Foreground);/釋放圖像和矩陣cvReleaseImage(&pFrImg);cvReleaseImage(&pBkImg);cvReleaseMat(&pFrameMat);cvReleaseMat(&pFrMat);cvReleaseMat(&pBkMat);cvReleaseCapture(&pCapture);4 選fileview選項卡中VideoProcessingDlg.h
10、,在CVideoProcessingDlg類中添加公有類成員:CString strAviFilePath;5 選fileview選項卡中VideoProcessingDlg.cpp,添加opencv頭文件#include cv.h#include highgui.h#include cxcore.h6 編譯執(zhí)行,成功!還可以添加一個”錄制視頻”的按鈕,修改ID號為IDC_RECORD, 雙擊“錄制視頻”按鈕,選擇默認的響應函數名,然后添加代碼:CvCapture* capture=cvCaptureFromCAM(-1); /打開攝像頭 CvVideoWriter* video=NULL;
11、IplImage* frame=NULL; int n; if(!capture) /如果不能打開攝像頭給出警告 coutCan not open the camera.width,frame-height); /創(chuàng)建CvVideoWriter對象并分配空間 /保存的文件名為camera.avi,編碼要在運行程序時選擇,大小就是攝像頭視頻的大小,幀頻率是32 if(video) /如果能創(chuàng)建CvVideoWriter對象則表明成功 coutVideoWriter has created.endl; cvNamedWindow(Camera Video,1); /新建一個窗口 int i = 0
12、; while(i = 200) / 讓它循環(huán)200次自動停止錄取 frame=cvQueryFrame(capture); /從CvCapture中獲得一幀 if(!frame) coutCan not get frame from the capture.endl; break; n=cvWriteFrame(video,frame); /判斷是否寫入成功,如果返回的是1,表示寫入成功 coutn0) break; /有其他鍵盤響應,則退出 cvReleaseVideoWriter(&video); cvReleaseCapture(&capture); cvDestroyWindow(C
13、amera Video); return ; 第二步,建立一個編程環(huán)境,然后加載opencv的庫路徑等等。具體步驟如下。PATH D:OpenCV2.3.1buildOPENCV D:OpenCV2.3.1buildx86vc10bin如下圖所示。 配置VS2010,選擇“視圖”“其他窗口”“屬性管理器”,如下圖所示。 雙擊Debug | Win32下的“Microsoft.Cpp.Win32.user”,如下圖所示。 在彈出的配置框中配置,選擇“VC+目錄”。1、在“包含目錄”中的結尾處(若結尾處無英文狀態(tài)下的“;”則需自行添加“;”,下同)加入以下內容添加以下內容:$(opencv)includeopencv;$(opencv)includeopencv2;$(opencv)include;2、在庫目錄中的結尾處加入以下內容添加:$(opencv)x86vc10lib;注:$(opencv)includeopencv是告訴VC去“opencv”這個變量中的文件夾下的includeopencv路徑中找OpenCV的庫文件目錄。如下圖所示。 在“鏈接器”-“輸入”-“附加依賴選項”中的結尾處加入以下內容:$(opencv)x86vc10libopencv_core231d.lib;$(opencv)x86vc10libopencv_highgui231d.lib;$(op
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 北京市海淀區(qū)2024-2025學年高二(上)期末生物試卷(含解析)
- 牛皮燈拆除施工方案
- 單法蘭液位計施工方案
- 2025年車手賽前測試試題及答案
- 2025年制程質量經理面試題及答案
- 不認可專項施工方案
- cme基準利率預測值
- 等離子處理3m膠
- 地震計算機技術預測相關的政策
- androidstudio課程設計報告
- 2025年1月浙江高考英語聽力試題真題完整版(含答案+文本+MP3)
- 2025年內蒙古興安盟突泉縣選聘生態(tài)護林員450人歷年高頻重點提升(共500題)附帶答案詳解
- 2025年興湘集團全資子公司招聘筆試參考題庫含答案解析
- 蒙醫(yī)學中的推拿暖宮療法與婦科保健技巧
- 湖北省生態(tài)環(huán)保有限公司招聘筆試沖刺題2025
- 廣告牌的制作安裝及售后服務方案
- 2024年建筑幕墻工程檢測理論考試題庫(精練300題)
- 2025屆廣東省廣州市實驗中學高三第一次調研測試數學試卷含解析
- 2024護理分級新標準
- 《5G時代萬物皆智聯》演講課件
- 造型的表現力 課件 2024-2025學年人教版初中美術八年級上冊
評論
0/150
提交評論