‘壹’ 在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可以将视频大小压缩减小内存吗
狸窝全能水平转换器就可以办到,不仅可以转换视频格式,同时对于视频编辑处理也不在话下。压缩视频还能做到无损压缩哦!我将简单的操作步骤也一起分享给你了,感兴趣的话你可以试试。