Opencv基础知识-----视频的读取和操作

原文地址:http://www.tuicool.com/articles/AVVjqa

Opencv 读取视频代码

#include   "stdafx.h"

#include "highgui.h"

 

int   main( int   argc, char * argv[])

{

                cvNamedWindow(   "avi" );

                CvCapture* capture = cvCreateFileCapture(   "D:\\sample.avi" );

                IplImage* frame;

                   while (1)

                {

                                frame = cvQueryFrame(capture);

                                   if (!frame)   break   ;

                                cvShowImage(   "avi" ,frame);

                                   char   c = cvWaitKey(33);

                                  

                                   if (c == 27)   break ;

                }

                cvReleaseCapture(&capture);

                cvDestroyWindow(   "avi" );

                   return   0;

}

结构体   CvCapture

  CvCapture 是一个结构体,用来保存图像捕获所需要的信息。 opencv提供两种方式从外部捕获图像:

一种是从摄像头中,

一种是通过解码视频得到图像。

       两种方式都必须从第一帧开始一帧一帧的按顺序获取,因此每获取一帧后都要保存相应的状态和参数。

       比如从视频文件中获取,需要保存视频文件的文件名,相应的解码器类型,下一次如果要

获取将需要解码哪一帧等。   这些信息都保存在 CvCapture 结构中,每获取一帧后,这些信息

都将被更新,获取下一帧需要将新信息传给获取的   api 接口

cvCreateFileCapture(char*name)

通过输入要读取的 avi 文件的路径,然后,该函数返回一个指向  CvCapture 结构体的指针。

cvQueryFrame(capture)

输入一个 CvCapture   类型的指针,该函数主要功能是将视频文件的下一帧加载到内存。与   cvLoadImage 的不同之处是,该函数不重新分配内存空间。

C=cvWaitKey(33)

当前帧被显示后,等待 33毫秒。如果用户触发了一个按键, c会被设置成这个按键的 ASCII码,否则会被设置成 -1。

cvWaitKey(33) 在此处的另外一个作用是,控制帧率。

cvReleaseCapture(&capture)

释放为 CvCapture结构体开辟的内存空间

关闭打开的 AVI文件相关的文件句柄

视频的使用和操作具体说明:

  • 对摄像头初始化捕捉
    • CvCapture* capture=cvCaptureFromCAM(0);//从摄像头0捕捉
  • 对文件初始化捕捉
    • CvCapture* capture=cvCaptureFromAVI("/home/lubo/....avi");//从文件捕捉
  • 捕捉某一帧
    • IplImage* img=0;
    • 方法一
      • if(!cvGrabFrame(capture)){ //捕获失败 exit(0); }
      • img=cvRetrieveFrame(capture);
    • 方法二
      • img=cvQueryFrame(capture);
    • 如果同时从几个摄像头捕捉,应该先从每一个摄像头抓取图像,抓取结束后再捕捉图像
  • 释放捕捉源(图像是由捕捉函数分配和释放的,所以不要释放图像)
    • cvReleaseCapture(&capture);

获取视频帧信息

  • 获得捕捉装置的属性
    • cvQueryFrame(capture); int frameH=(int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_HEIGHT);//视频的高
                    CV_CAP_PROP_FRAME_WIDTH//视频的宽 CV_CAP_PROP_FPS //每秒帧数 
                    CV_CAP_PROP_FRAME_COUNT//帧数 CV_CAP_PROP_FOURCC //4-character of codec 
                    CV_CAP_PROP_BRIGHTNESS//亮度 CV_CAP_PROP_CONTRAST//对比度 
                    CV_CAP_PROP_SATURATION//饱和度 CV_CAP_PROP_HUE//色调
  • 获得帧的当前位置
    • CV_CAP_PROP_POS_MSEC //视频当时的毫秒数或者视频的时间戳
    • CV_CAP_PROP_POS_FRAME//0-based
                             CV_CAP_PROP_AVI_RATIO//视频文件的相对位置

保存视频文件

  • 初始化视频写入
      • CvCideoWriter* writer=0;
      • int isColor=1;
      • int fps=25;//30
      • int frameW=640;
      • int frameH=480;
    writer=cvCreateVideoWriter("out.avi",CV_FOURCC('P','I','M','1'),fps,cvSize(frameW,frameH),isColor);
  • 视频写入的格式还有
      • CV_FOURCC('M','J','P','G');
      • CV_FOURCC('M','P','4','2');
                    CV_FOURCC('D','I','V','3'); 
    • CV_FOURCC('D','I','V','X');
      • CV_FOURCC('U','2','6','3');
      • CV_FOURCC('I','2','6','3');
    • CV_FOURCC('F','L','V','1');
  • 写入视频文件
      • IplImage* img=0;
      • int nFrames=50;
      • for(int i=0;i<nFrames;i++){
        • cvGrabFrame(capture);
        • img=cvRetreveFrame(capture);
      • cvWriteFrame(writer,img);
      }
  • 释放视频写入

    cvReleaseVideoWriter(&writer);



http://www.niftyadmin.cn/n/1691965.html

相关文章

python工具库composer_Composer : php依赖管理工具

原始时代我记得在当时用php的时候还没有composer&#xff0c;只有个pear&#xff0c;但是不好用呀&#xff0c;还不如直接在互联网上到处复制代码了&#xff0c;更快更不容易出错&#xff0c;当时也没有github这么好的社区工具了总结如下代码混乱规范不统一没有后续统一更新等管…

python的time模块没有clock_python之time模块

1、time.time()方法返回当前时间的时间戳(1970纪元后经过的浮点秒数)。语法&#xff1a;应用&#xff1a;2、time.localtime()方法time.localtime()函数类似gmtime(),作用是格式化时间戳为本地时间。如果sec参数未输入&#xff0c;则以当前时间为转换时间。DST(Daylight Saving…

python在服务器上运行慢_服务器响应慢问题

1.排除本机自身原因2.服务器性能分析3.项目本身分析(不详细说)4.虚拟机分析5.数据库分析二.详细分析方法1.排除本机自身原因可以使用站长工具测试网站速度。2.服务器性能分析使用top命令查看服务器的资源使用情况&#xff0c;主要分析CPU和内存的使用情况(top 命令是 Linux 下常…

AcWing 蓝桥杯AB组辅导课 02、二分与前缀和

文章目录前言一、二分整数二分知识点模板题&#xff1a;AcWing 789.数的范围实数二分知识点模板题&#xff1a;AcWing 790.数的三次方根习题题1&#xff1a;AcWing 730.机器人跳跃问题【中等】题2&#xff1a;AcWing 1221.四平方和【简单&#xff0c;蓝桥杯题】题3&#xff1a;…

图象处理基本算法[整理]

1)将256*256分辨率的图像变为128*128分辨率可以将源图像划分成2*2的子图像块,然后将2*2的 子图像块的所有像素颜色均按照F(i,j)的颜色值进行设定&#xff0c;达到降低分辨率的目的。 如: F(i,j) F(i,j1) F(i,j) F(i,j) F(i1,j) F(i1,j1) 变成 F(i,j…

python解释器把python代码一次性翻译成目标代码_Java和Python都需要把代码编译成字节码,为什么Python算解释型语言而Java不算呢?...

编程语言和我们制造的物理机器都是图灵机。 python是两层图灵机&#xff0c;而java是三层图灵机。数学家证明图灵机是可以运行在图灵机上的。Python > 翻译 > 物理机器java > 翻译 > jvm虚拟机 > 翻译 > 物理机器如果是两层图灵机&#xff0c;中间的翻译这个…

麦克纳姆轮运动原理_从溜溜球看物理实验——麦克斯韦滚摆分析

这是熊猫滚滚趣味科普小课堂第 十五 课时间如流水&#xff0c;《火力少年王》这部剧已经播出14年了&#xff0c;这是一部以溜溜球为主题的青春热血剧。以当时中国的电视制作水平&#xff0c;剧中的各种特效简直可以用一个“迷”字来形容了&#xff0c;但是再怎么夸张的特效和炫…

cvGetCaptureProperty 摄像头操作

原文地址&#xff1a;http://lubaihua33.blog.163.com/blog/static/7407672520107635031343/ 获得视频获取结构的属性 double cvGetCaptureProperty( CvCapture* capture, int property_id );capture 视频获取结构。property_id 属性标识。可以是下面之一&#xff1a; CV_CAP_…