opencv存儲視頻
⑴ openCV採集攝像頭圖片並保存的方法
現在在vc上採集視頻常用的方法有三:vfw,directshow,opencv
你是要進行圖像處理的話推薦opencv(具體參考:於仕琪,opencv教程基礎篇中的例3-6,稍作修改,估計就能用於你的工程)
下面貼出我自己編的一個小工程:如有疑問,E-mail:[email protected]
進行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)存儲圖片
}
ps:你還需要在c盤根目錄下建立一個叫1的文件夾保存圖片。
祝你成功!
⑵ 怎麼用opencv調用筆記本攝像頭錄像並保存下來啊 求高手賜教
int main()
{
CvCapture* capture=cvCaptureFromCAM(0);//讀取攝像頭
if(capture==NULL)
{
printf("沒有檢測到攝像頭");
return 0;
}
cvNamedWindow("video",1);
for (;;)
{
IplImage* frame=cvQueryFrame(capture);
if(!frame)
break;
cvShowImage("video",frame);
if(cvWaitKey(100)>=0)
break;
}
cvReleaseCapture(&capture);
cvDestroyWindow("video");
return 0;
}
大概就這樣了,思路很簡單,調用opencv的函數cvCaptureFromCAM()得到視頻,然後再一幀一幀的獲取圖像,再顯示出來,其實和普通的圖像讀入,沒什麼很大的區別。
⑶ opencv怎麼寫視頻文件
#include<cv.h>#include<highgui.h>intmain(intargc,char**argv)
{
CvCapture*capture=NULL;
capture=cvCreateFileCapture("紅動中國設計網視頻素材2185.avi");if(!capture)return-1;//獲取視頻的第一幀並存在bgr_frame
IplImage*bgr_frame=cvQueryFrame(capture);//獲得視頻的總幀數CV_CAP_PROP_FPS幀率
doublefps=cvGetCaptureProperty(capture,CV_CAP_PROP_FPS);
//獲得原始視頻的高度和寬度
CvSizesize=cvSize((int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_WIDTH),
(int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_HEIGHT));///創建一個視頻文件參數分別表示新建視頻的名稱視頻壓縮的編碼格式新建視頻的幀率新建視頻的圖像大小
CvVideoWriter*writer=cvCreateVideoWriter("1ai.avi",CV_FOURCC('M','J','P','G'),fps,size);//創建首地址並分配存儲空間
IplImage*logpolar_frame=cvCreateImage(size,IPL_DEPTH_8U,3);//獲取視頻的下一幀
while((bgr_frame=cvQueryFrame(capture))!=NULL)
{//將視頻從笛卡爾坐標系轉到極坐標系參數分別表示輸入圖像輸出圖像變換中心尺度參數填充輸出圖像所有參數+CV_INTER_LINEAR表示雙線性參值(具體什麼意思)
cvLogPolar(bgr_frame,logpolar_frame,cvPoint2D32f(bgr_frame->width/2,bgr_frame->height/2),80,CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS);//將獲取到的每一幀從笛卡爾坐標系轉到極坐標系後的參數存到新建的視頻文件cvWriteFrame(writer,logpolar_frame);//將獲取的視頻通過mainwin窗口進行展示
cvShowImage("mainwin",logpolar_frame);charc=cvWaitKey(33);//ESC默認退出
if(c==27)break;
}//釋放程序中申請的空間
cvReleaseVideoWriter(&writer);
cvReleaseImage(&logpolar_frame);
cvReleaseCapture(&capture);return(0);
}
⑷ OPenCV保存非壓縮(全幀)AVI 文件。如何保存非壓縮AVI文件
我也在學opencv呢,在學習第二個小程序吧。。。
我也遇到一樣的問題,你是不是也是播放avi時彈出窗口(僅顯示第一幀)後立刻退出?
以下三個都是從網上搜到的原因
1 解碼器原因
2 avi(數碼相機拍的)裡麵包含了聲音
3 好像之前比較早版本的opencv不支持清晰度大於300左右成200左右的視頻
⑸ 如何opencv讀取攝像頭並保存每一幀圖像
#include<highgui.h>
#include<windows.h>
#include<stdio.h>
int main ()
{
CvCapture *capture=cvCreateCameraCapture(0);
cvNamedWindow("camera",CV_WINDOW_AUTOSIZE);
IplImage *image;
char file_name[15];
int i;
while(1)
{
for(i=0;i<99999;i++)
{
image=cvQueryFrame(capture);
if(!image)
break;
cvShowImage("camera",image);
char c=cvWaitKey(20);
if(c==27)
{
cvReleaseCapture(&capture);
cvDestroyWindow("hh");
exit(0);
}//按esc退出
sprintf(file_name,"d:\\%05d.jpg",i);//d盤根目錄下生成
cvSaveImage(file_name,image);
}
Message(NULL,"文件名超出范圍!","警告!",MB_OK);
}
}
供參考。
⑹ 如何把opencv讀取的攝像頭視頻保存到指定文件夾下
不用工具的話
先用ie打開視頻
點擊工具
選項
設置查看臨時文件存放位置
然後等視頻載入完之後搜索這個文件夾
按大小排序
一般比較大的文件就是了
必要時要改擴展名
不然用軟體工具
⑺ opencv 用攝像頭錄制視頻並儲存的問題
cvWaitKey的時間精度可能達不到你的精度
改變cvCreaterVideoWriter裡面的幀率並將cvWaitKey的時間改為1000/幀率
⑻ opencv 保存攝像頭視頻 如何設置幀率
opencv讀取視頻,攝像頭,保存視頻最基礎的代碼
#include "cv.h"
#include "highgui.h"
int main( int argc, char** argv )
{
CvCapture* capture = 0;
IplImage* frame = 0;
capture = cvCaptureFromCAM( 0 );
//capture = cvCaptureFromAVI("1.wmv");//播放視頻 就換成這句
int fps=25; //捕捉幀率
//double fps = cvGetCaptureProperty(capture,CV_CAP_PROP_FPS); //視頻幀率
CvVideoWriter* writer = 0; //保存就加上這句
int isColol=1;
int frameW=640;
int frameH=480;
writer=cvCreateVideoWriter("out.avi",CV_FOURCC('F','L','V','1'),fps,cvSize(frameW,frameH),isColol);
cvNamedWindow( "攝像頭", 1 );
//for(int i=0;i<50;i++) //2秒
for(;;) //一直讀
{
frame = cvQueryFrame( capture );
cvWriteFrame(writer,frame );
cvShowImage( "攝像頭", frame ); //顯示一幀圖像
cvWaitKey(1000 / fps);//視頻速度
}
cvReleaseVideoWriter(&writer);
cvReleaseImage(&frame);
cvReleaseCapture( &capture );
cvDestroyWindow("攝像頭");
return 0;
⑼ VS2010安裝了opencv後使用保存視頻文件 可是為什麼就是保存不成功呢
建議去閱讀《Learning OpenCV》,學習opencv的必備,可以當成工具書來用