當前位置:編程學習大全網 - 編程語言 - 如何用DirectShow在MFC中作攝像頭捕獲程序

如何用DirectShow在MFC中作攝像頭捕獲程序

現在在vc上采集視頻常用的方法有三:vfw,directshow,opencv

妳是要進行圖像處理的話推薦opencv(具體參考:於仕琪,opencv教程基礎篇中的例3-6,稍作修改,估計就能用於妳的工程)

下面貼出我自己編的壹個小工程:如有疑問,E-mail:zhoutingzhi@gmail.com

進行opencv的預備操作妳要看那本書和逛opencv中文網

如有問題可以和我討論(我也是菜鳥,剛為解決了這個問題竊喜不已)。

1.新建mfc對話框工程,在其中添加壹個picture控件,除了ID以外什麽都不用改

2.在對話框頭文件(沒有Dlg那個)中添加(最好是在“#include "resource.h" // main symbols之後”):

#include "cxcore.h"

#include "cvcam.h"

#include "windows.h"

#include "cv.h"

#include "highgui.h"

3.在工程-》設置-》選擇所有配置-》link(連接)-》對象/庫模塊-》中添加:

kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib cxcore.lib cv.lib ml.lib cvaux.lib highgui.lib cvcam.lib

4.在需要觸發攝像頭顯示的地方添加:

void CVideomfcDlg::OnButton1()

{

// TODO: Add your control notification handler code here

int ncams = cvcamGetCamerasCount( );//返回可以訪問的攝像頭數目

HWND MyWin=::GetDlgItem(m_hWnd,IDC_VIDEO); //獲得控件句柄(IDC_VIDEO就是圖片控件)

cvcamSetProperty(0, CVCAM_PROP_ENABLE, CVCAMTRUE); //選擇第壹個攝像頭

int width=240;

int height=240;

cvcamSetProperty(0,CVCAM_PROP_WINDOW, &MyWin); // Selects a window for

cvcamSetProperty(0,CVCAM_RNDWIDTH, &width);

cvcamSetProperty(0,CVCAM_RNDHEIGHT, &height);

cvcamSetProperty(0, CVCAM_PROP_CALLBACK, callback1);

//回調函數將處理每壹幀

cvcamInit( );

cvcamStart( );

}

5.改變顯示的圖像序列大小,在窗口屬性設定了以後,添加如下代碼:

int width=320; //這個就是需要顯示的窗口大小

int height=240; //根據自己需要選擇

cvcamSetProperty(0,CVCAM_RNDWIDTH, &width);

cvcamSetProperty(0,CVCAM_RNDHEIGHT, &height);

6.在對話框類中添加callback成員函數(註意,在添加函數的時候,壹定要選擇static,不選的話妳就自己郁悶去吧,反正我是為了這個郁悶了2個禮拜)

void CVideomfcDlg::callback1(IplImage *image)

{

IplImage* image1 = image;

int i,j;

assert (image);

//獲取當前系統時間

SYSTEMTIME st2=;

GetLocalTime(&st2);

char sss[18]=; //這個是用來存儲所要保存的圖片名的,用的是壹個笨辦法,先定義,再修改其中的數組值。

sss[7]=st2.wHour/10+48; //獲取系統當前小時

sss[8]=st2.wHour%10+48;

sss[9]=st2.wMinute/10+48; //獲取系統當前分鐘

sss[10]=st2.wMinute%10+48;

sss[11]=st2.wSecond/10+48; //獲取系統當前秒

sss[12]=st2.wSecond%10+48;

cvSaveImage(sss,image1); //使用系統當前時間為名稱(XXXXXX.jpg)存儲圖片

}

還需要在c盤根目錄下建立壹個叫1的文件夾保存圖片。

  • 上一篇:納米機器人可以自哪些領域發揮作用?
  • 下一篇:學齡前教育APP擬被叫停
  • copyright 2024編程學習大全網