關(guān)于攝像頭的控制操作,無非就是獲取攝像頭圖像并且保存攝像頭視頻等常用的操作。
關(guān)于在MFC項(xiàng)目中利用opencv捕獲攝像頭信息,在下面這篇文章中寫的很詳細(xì):
http://blog.csdn.net/weixingstudio/article/details/7360941
如果在這個項(xiàng)目的基礎(chǔ)上添加保存攝像頭信息,就可以簡單的實(shí)現(xiàn)了,在原來項(xiàng)目的基礎(chǔ)上調(diào)用cvCreateVideoWriter()函數(shù)創(chuàng)建一個寫視頻文件的指針,然后把每一幀的視頻文件用cvWriteFrame(writer,m_Frame);這個函數(shù)實(shí)現(xiàn)就可以了。
writer=cvCreateVideoWriter("MyVideo.avi",CV_FOURCC('x','v','I','D'),25,cvSize(640,480));
上面函數(shù)中的參數(shù)大概就是創(chuàng)建視頻文件的名字,視頻壓縮的格式,每秒鐘的視頻幀數(shù),視頻的大小。具體的參數(shù)設(shè)置請參考o(jì)pencv開發(fā)文檔。
關(guān)于opencv項(xiàng)目的配置,請參考o(jì)pencv社區(qū)教程。本項(xiàng)目的所有配置,可以參考鏈接:http://blog.csdn.net/weixingstudio/article/details/7360941
兩個主要的函數(shù):
CvCapture* capture;
CRect rect;
CDC *pDC;
HDC hDC;
CWnd *pwnd;
- void CVideoMFCDlg::OnBnClickedButton1()
- {
-
-
- if(!capture)
- {
- capture = cvCaptureFromCAM(0);
-
- }
-
- if (!capture)
- {
- AfxMessageBox("無法打開攝像頭");
- return;
- }
- writer=cvCreateVideoWriter("MyVideo.avi",CV_FOURCC('x','v','I','D'),25,cvSize(640,480));
-
- IplImage* m_Frame;
- m_Frame=cvQueryFrame(capture);
- CvvImage m_CvvImage;
- m_CvvImage.CopyOf(m_Frame,1);
- if (true)
- {
- m_CvvImage.DrawToHDC(hDC, &rect);
-
- }
-
-
- SetTimer(1,10,NULL);
- }
void CVideoMFCDlg::OnBnClickedButton1()
{
// TODO: Add your control notification handler code here
//AfxMessageBox("OK");
if(!capture)
{
capture = cvCaptureFromCAM(0);
//AfxMessageBox("OK");
}
if (!capture)
{
AfxMessageBox("無法打開攝像頭");
return;
}
writer=cvCreateVideoWriter("MyVideo.avi",CV_FOURCC('x','v','I','D'),25,cvSize(640,480));
// 測試
IplImage* m_Frame;
m_Frame=cvQueryFrame(capture);
CvvImage m_CvvImage;
m_CvvImage.CopyOf(m_Frame,1);
if (true)
{
m_CvvImage.DrawToHDC(hDC, &rect);
//cvWaitKey(10);
}
// 設(shè)置計(jì)時(shí)器,每10ms觸發(fā)一次事件
SetTimer(1,10,NULL);
}
void CVideoMFCDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: Add your message handler code here and/or call default
/************************************************************************/
/* 顯示攝像頭 */
/************************************************************************/
IplImage* m_Frame;
m_Frame=cvQueryFrame(capture);
CvvImage m_CvvImage;
m_CvvImage.CopyOf(m_Frame,1);
if (true)
{
m_CvvImage.DrawToHDC(hDC, &rect);
cvWriteFrame(writer,m_Frame);
//cvWaitKey(10);
}
CDialogEx::OnTimer(nIDEvent);
}
關(guān)于整個顯示攝像頭并且保存攝像頭信息的工程源碼,可以從下面鏈接下載:
http://download.csdn.net/detail/weixingstudio/4284066
|