opencv實(shí)現(xiàn)定時(shí)錄像功能
opencv作為一款強(qiáng)大的機(jī)器視覺(jué)庫(kù),以其簡(jiǎn)便性得到了各圖像處理開(kāi)發(fā)人員的青睞?,F(xiàn)在就給大家介紹如何用opencv實(shí)現(xiàn)定時(shí)錄像并以實(shí)際時(shí)間作為文件名保存。之前網(wǎng)上已經(jīng)有一些類似的代碼,但是大多數(shù)網(wǎng)友反映程序無(wú)法執(zhí)行,主要分析有兩個(gè)原因。電腦上未安裝視頻編碼器,這里推薦大家XviD,網(wǎng)上不好下載可以私信我或是留下郵箱,我統(tǒng)一發(fā)送。然后在選擇編碼格式上,我選擇的是'X', 'V', 'I', 'D'格式,也就是我們常見(jiàn)的avi格式。
#include "cv.h" #include "cxcore.h" #include "highgui.h" #include <iostream> #include <time.h> #include <Windows.h> #include <Mmsystem.h> #include "stdio.h" int timea=100000; using namespace std; /*void times() { SYSTEMTIME sys_time; //將變量值設(shè)置為本地時(shí)間 GetLocalTime( &sys_time ); //輸出時(shí)間 printf( "%4d/%02d/%02d %02d:%02d:%02d.%03d 星期%1d\n",sys_time.wYear, sys_time.wMonth, sys_time.wDay, sys_time.wHour, sys_time.wMinute, sys_time.wSecond, sys_time.wMilliseconds, sys_time.wDayOfWeek); // system("time"); // // system("pause"); return 0; } */ int main() { CvCapture* capture=cvCaptureFromCAM(0); CvVideoWriter* video=NULL; IplImage* frame=NULL; int n; if(!capture) //如果不能打開(kāi)攝像頭給出警告 { cout<<"Can not open the camera."<<endl; return -1; } else { frame=cvQueryFrame(capture); //首先取得攝像頭中的一幀 int c=0; SYSTEMTIME sys_time; //將變量值設(shè)置為本地時(shí)間 GetLocalTime( &sys_time ); char buf[1024]; sprintf(buf,"camera-%4d-%2d-%02d-%02d-%02d-%02d.avi",sys_time.wYear,sys_time.wMonth,sys_time.wDay, sys_time.wHour,sys_time.wMinute, sys_time.wSecond); video=cvCreateVideoWriter(buf, CV_FOURCC('X', 'V', 'I', 'D'), 25, cvSize(frame->width,frame->height)); //創(chuàng)建CvVideoWriter對(duì)象并分配空間 //保存的文件名為camera.avi,編碼要在運(yùn)行程序時(shí)選擇,大小就是攝像頭視頻的大小,幀頻率是32 if(video) //如果能創(chuàng)建CvVideoWriter對(duì)象則表明成功 { cout<<"VideoWriter has created."<<endl; } cout<<"set the record time\n"<<endl;//設(shè)置錄像時(shí)間 cin>>timea; int ti=timea*25; cvNamedWindow("Camera Video",1); //新建一個(gè)窗口 int i = 0; while(i <= ti) // 讓它循環(huán)ti次自動(dòng)停止錄取 { frame=cvQueryFrame(capture); //從CvCapture中獲得一幀 if(!frame) { cout<<"Can not get frame from the capture."<<endl; break; } n=cvWriteFrame(video,frame); //判斷是否寫入成功,如果返回的是1,表示寫入成功 // cout<<n<<endl; cvShowImage("Camera Video",frame); //顯示視頻內(nèi)容的圖片 i++; if(cvWaitKey(2)>0) break; //有其他鍵盤響應(yīng),則退出 } cvReleaseVideoWriter(&video); //如果不釋放則春不上 cvReleaseCapture(&capture); cvDestroyWindow("Camera Video"); } return 0; }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C語(yǔ)言中獲取文件狀態(tài)的相關(guān)函數(shù)小結(jié)
這篇文章主要介紹了C語(yǔ)言中獲取文件狀態(tài)的相關(guān)函數(shù)小結(jié),包括stat()函數(shù)和fstat()函數(shù)以及l(fā)stat()函數(shù)的使用,需要的朋友可以參考下2015-09-09OpenCV實(shí)現(xiàn)輪廓的發(fā)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了OpenCV如何實(shí)現(xiàn)輪廓的發(fā)現(xiàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05關(guān)于C++友元類的實(shí)現(xiàn)講解
今天小編就為大家分享一篇關(guān)于關(guān)于C++友元類的實(shí)現(xiàn)講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-12-12Typedef在C語(yǔ)言和C++中的用法和區(qū)別
在C語(yǔ)言和C++中,typedef是一個(gè)非常常用的關(guān)鍵字,用于為數(shù)據(jù)類型定義別名,盡管它在兩種語(yǔ)言中都有相似的功能,但由于C++具有更豐富的類型系統(tǒng),因此在實(shí)際應(yīng)用中,typedef在兩者間的使用存在一些微妙的差異2024-01-01C++實(shí)現(xiàn)LeetCode(31.下一個(gè)排列)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(31.下一個(gè)排列),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07C++設(shè)計(jì)模式之適配器模式(Adapter)
這篇文章主要為大家詳細(xì)介紹了C++設(shè)計(jì)模式之適配器模式Adapter,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03Visual Studio添加第三方庫(kù)的實(shí)現(xiàn)步驟
使用Visual Studio編寫C語(yǔ)言程序能夠提供全面而強(qiáng)大的開(kāi)發(fā)環(huán)境,本文主要介紹了Visual Studio添加第三方庫(kù)的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07