『壹』 在opencv中可以獲得視頻的解析度,幀率,時間等信息,怎麼用這些信息計算視頻文件的大小和碼率
你清楚解析度,幀率是什麼么?
解析度表示一張圖片的像素數比如1024*1024的解析度其圖像大小就是1M(不包括頭文件佔用的,而且是未壓縮的圖片),幀率代表每秒有多少張圖片,假設一秒有24張1024*1024的圖片,那麼每秒的數據量就為24M,視頻大小(未壓縮的就為24M),當然真彩數據(RGB)需要X3,
碼率這個就要看你視頻的壓縮情況了,不同的格式都有不同的碼率,具體參考網路
『貳』 opencv 用攝像頭錄制視頻並儲存的問題
cvWaitKey的時間精度可能達不到你的精度
改變cvCreaterVideoWriter裡面的幀率並將cvWaitKey的時間改為1000/幀率
『叄』 opencv如何將連續圖像壓縮成視頻
這是我之前寫的一段代碼
#include "cv.h"
#include "highgui.h"
#include <stdio.h>
/*******************************************************
圖片轉換為視頻
*******************************************************/
//void ImagetoVideo()
main()
{
int i = 0;
//初始化視頻編寫器,參數根據實際視頻文件修改
CvVideoWriter* writer = 0;
int isColor = 1;
//int fps = 25; // or 30
double fps = 6;
int frameW = 1920;
int frameH = 1080;
writer = cvCreateVideoWriter("decoderout.avi",CV_FOURCC('X','V','I','D'),fps, cvSize(frameW, frameH), isColor);
printf("\tvideo height:%d\n\tvidoe width:%d\n\t\fps:%d\n",frameH, frameW, fps);
int startframe = 1; //圖片開始幀號
int endframe = 58;
char cur_fn[255];
char* prefix = "F:\\視頻增強\\視頻解碼\\videoDecoder5-7-常式-先得到每一個nal\\img\\";//圖片序列的路徑
char* ext = ".bmp"; //序列圖片的後綴名
//存儲視頻文件
IplImage* img = 0;
// int nFrames = 50;
// for (i = 0; i < nFrames; i++)
// {
// cvWriteFrame(writer,img); //寫入一幀到一個視頻文件中 cvGrabFrame(capture);
// }
while (startframe <= endframe)
{
strcpy(cur_fn,"");
sprintf(cur_fn,"%s%d%s",prefix,startframe,ext);
img = cvLoadImage(cur_fn,isColor);
if (!img)
{
printf("can not open file\n");
return ;
}
cvWriteFrame(writer,img);
cvWaitKey(20);
startframe++;
cvReleaseImage(&img);
}
//創建窗口
// cvNamedWindow("mainWin",CV_WINDOW_AUTOSIZE);
// cvShowImage("mainWin",img);
// cvWaitKey(20);
//釋放視頻存儲器
cvReleaseVideoWriter(&writer);
}
『肆』 使用OpenCV獲取攝像頭圖像,編碼壓縮並發送的問題
opencv用CvVideoWriter 來寫視頻文件,先用 cvCreateVideoWriter創建CvVideoWriter對象的,第二個參數寫「-1」,就可以選擇壓縮編碼方式
『伍』 opencv什麼視頻編碼格式視頻文件最小
一般來說是flv,至於為什麼?自己去看視頻編碼,網路。
視頻文件的一般構成是:
文件頭+文件內容,
文件內容一般是圖像的壓縮格式,這種壓縮就是對相鄰的若干幀的一些處理,比如背景,人物的運動規律,色彩等進行盡可能的壓縮,由於各種格式採取的編碼方式和封裝方式不同大小不一樣。一般對於同一個視頻mkv格式文件大小是最大的,flv是比較小的了。
對opencv說一下:
用opencv處理視頻,假設原視頻過大,一般是由於解析度過大(通過重新定義畫面大小,處理視頻寫入一個新的視頻文件;也可以用格式工廠轉成相應的低解析度格式)或者時間過長(可以裁減或者定義段,將視頻通過幀進行分段處理,每經過多少幀分成一段)導致的。
採取上訴方式可以有效降低程序所需要處理的數據。
『陸』 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;
『柒』 請問opencv是否支持H.264標准編碼的視頻
可以的,可以讀取h.264, mp4,avi等,我都試過的。opencv是調用ffmpeg來讀取的。
『捌』 調用opencv的函數cvCreateVideoWriter生成的視頻太大(幾G),怎麼生成小的視頻
1、加個h.263的壓縮類把圖像壓縮了再儲存。
2、H.263是由ITU-T制定的視頻會議用的低碼率視頻編碼標准,屬於視頻編解碼器。H.263最初設計為基於H.324的系統進行傳輸(即基於公共交換電話網和其它基於電路交換的網路進行視頻會議和視頻電話)。後來發現H.263也可以成功的應用與H.323(基於RTP/IP網路的視頻會議系統),H.320(基於綜合業務數字網的視頻會議系統),RTSP(流式媒體傳輸系統)和SIP(基於網際網路的視頻會議)。
3、視頻(Video)泛指將一系列靜態影像以電信號的方式加以捕捉、紀錄、處理、儲存、傳送與重現的各種技術。連續的圖像變化每秒超過24幀(frame)畫面以上時,根據視覺暫留原理,人眼無法辨別單幅的靜態畫面;看上去是平滑連續的視覺效果,這樣連續的畫面叫做視頻。視頻技術最早是為了電視系統而發展,但現在已經發展為各種不同的格式以利消費者將視頻記錄下來。網路技術的發達也促使視頻的紀錄片段以串流媒體的形式存在於網際網路之上並可被電腦接收與播放。視頻與電影屬於不同的技術,後者是利用照相術將動態的影像捕捉為一系列的靜態照片。
『玖』 OPenCV保存非壓縮(全幀)AVI 文件。如何保存非壓縮AVI文件
我也在學opencv呢,在學習第二個小程序吧。。。
我也遇到一樣的問題,你是不是也是播放avi時彈出窗口(僅顯示第一幀)後立刻退出?
以下三個都是從網上搜到的原因
1 解碼器原因
2 avi(數碼相機拍的)裡麵包含了聲音
3 好像之前比較早版本的opencv不支持清晰度大於300左右成200左右的視頻
『拾』 opencv可以將視頻大小壓縮減小內存嗎
狸窩全能水平轉換器就可以辦到,不僅可以轉換視頻格式,同時對於視頻編輯處理也不在話下。壓縮視頻還能做到無損壓縮哦!我將簡單的操作步驟也一起分享給你了,感興趣的話你可以試試。