[OPEN CV] 常用视频操作方法

时间:2022-05-27 06:58:33

一、视频的定义

视频(Video)泛指将一系列静态影像以电信号的方式加以捕捉、纪录、处理、储存、传送与重现的各种技术。连续的图像变化每秒超过24帧(frame)画面以上时,根据视觉暂留原理,人眼无法辨别单幅的静态画面;看上去是平滑连续的视觉效果,这样连续的画面叫做视频。视频技术最早是为了电视系统而发展,但现在已经发展为各种不同的格式以利消费者将视频记录下来。网络技术的发达也促使视频的纪录片段以串流媒体的形式存在于因特网之上并可被电脑接收与播放。视频与电影属于不同的技术,后者是利用照相术将动态的影像捕捉为一系列的静态照片。

二、OPEN CV视频处理流程

[OPEN CV] 常用视频操作方法

三、OPEN CV支持的s

1、非压缩格式的AVI文件(或是MPEG1格式的),这个不需要装任何插件就可以播放了。

2、DIVX格式的AVI,这也是MPEG4的一种,安装最新的DIVX 5.21(目前最新版),就可以播放了,不过缺点是在播放之初会有一个DIVX的标记显示几秒。

下载地址: http://gupin.fangdown.com/soft/138.htm

3、XVID格式的AVI,这也是MPEG4的一种,可以说是从DIVX变种而来的,据说是XVID原作者不满意DIVX商业化收费的行为,而开发的一个全Free的MPEG4编码核心,安装最新的XVID(1.02版)就可以播放。

下载地址: http://gupin.fangdown.com/soft/45.htm

4、ffdshow MPEG-4格式的AVI,现在越来越多的AVI都采用ffdshow MPEG-4来,集成了DIVX与XVID的一种东西(好象还支持WMV与AC3音频),因此如果你装了ffdshow MPEG-4,就可以不用装XVID与DIVX等编码核心了。另外ffdshow MPEG-4也提供丰富的滤镜功能比如增亮,增加锐度等,最新的ffdshow MPEG-4 Video Decoder 20041012。

下载地址:http://gupin.fangdown.com/soft/383.htm

5、WMV9格式的AVI,微软自己推出的MPEG4编码标准,使用Windows Media 9.0就可以播放,如果没有的话,也可以下载一个Windows Media Encoder 9.0,使你的系统支持WMV 9.0的格式。

下载地址:http://www.ogg.cn/Software/view-software-62.html

6、VP6格式的AVI,也是一种MPEG4的编码格式,On2 Technologies开发的编码器,VP6号称在同等码率下,视频质量超过了Windows Media 9、Real 9和H.264。VP6视频编码器目前被中国的EVD所采用。说真的,现在用这个不多。最新版本是VP6 vfw Codec 6.2.6.0。

四、OPEN CV处理

int main()
{
cout << "请输入您要运行的功能:" << endl;
cout << "1:批量读取目录下的图片并展示:" << endl;
cout << "2:将视频中的帧保存为图片" << endl;
cout << "3:将图片合成为视频" << endl;
cout << "请输入您的选择:" << endl;
int iopt;
cin >> iopt;
switch (iopt)
{
case ://批量读取文件目录图片并展示
{
char filename[] = { };
char winname[] = {"winimg"};
Mat winimg;
for (int i = ; i <= ; i++)
{
snprintf(filename, , "C:\\dev\\res\\IMG_%d.JPG", i);
//strcpy_s(winname, filename);
winimg=imread(filename);
if (winimg.empty()) break;
imshow(winname, winimg);
if (waitKey() >= ) break;
}
destroyAllWindows();
break;
}
case :
{
//将视频拆分成图片保存
char outfile[] = { };
VideoCapture cap;
cap.open("C:\\dev\\res\\test.mp4");
if (!cap.isOpened())
{
cout << "视频打开失败" << endl;
return -;
}
Mat frame;
int totalframe = cap.get(CV_CAP_PROP_FRAME_COUNT);
for(int i=;i<totalframe;i++)
{
cap >> frame;
if (frame.empty()) break;
snprintf(outfile, , "C:\\dev\\res\\IMG_%d.jpg", i);
imshow("img", frame);
imwrite(outfile, frame);
if (waitKey() >= ) break;
}
destroyAllWindows();
break;
}
case ://图像合成视频
{
char filename[] = { };
Size size0 = Size(, );
VideoWriter writer("c:\\dev\\res\\merge.avi",CV_FOURCC('X','V','I','D'),,size0,true);
Mat frame;
for (int i = ; i < ; i++)
{
snprintf(filename, , "C:\\dev\\res\\IMG_%d.jpg", i);
frame = imread(filename);
if (frame.empty()) break;
imshow("winname", frame);
writer << frame;
}
destroyAllWindows();
break;
}
}
return ;
}