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 code 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);

Opencv基础知识-----视频的读取和操作的更多相关文章

  1. python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。

    本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...

  2. Nginx入门篇-基础知识与linux下安装操作

    我们要深刻理解学习NG的原理与安装方法,要切合实际结合业务需求,应用场景进行灵活使用. 一.Nginx知识简述Nginx是一个高性能的HTTP服务器和反向代理服务器,也是一个 IMAP/POP3/SM ...

  3. opencv基础知识------IplImage, CvMat, Mat 的关系和相互转换

    Mat,cvMat和IplImage这三种类型都可以代表和显示图像,但是,Mat类型侧重于计算,数学性较高,openCV对Mat类型的计算也进行了优化.而CvMat和IplImage类型更侧重于“图像 ...

  4. OpenCV基础知识介绍

    1.图像与矩阵 一般来说,图像是一个标准的矩形,有着宽度(width)和高度(height).而矩阵有着行(row)和列(column),矩阵的操作在数学和计算机中的处理都很常见且成熟,于是很自然的就 ...

  5. openCV基础知识

    openCV主体分为5个模块: CV图像处理函数和计算机视觉算法: ML机器学习库,包含许多聚类和数据分析函数: HighGUI图像和视频的输入输出: [分成三部分:硬件部分--摄像机;文件部分--载 ...

  6. opencv基础知识-videowriter

    一.前言-简介 在试验中需要常常将实验结果进行保存,在opencv中提供很好用的录制视频的句柄,也可称之为类-videowriter. videowriter应用那是相当的简单,总之分为三步: //声 ...

  7. OpenCV 基础知识------图像创建、访问、转换

    cvCreateImage函数-- Cxcore数组操作 创建头并分配数据 IplImage* cvCreateImage( CvSize size, int depth, int channels ...

  8. opencv:摄像头和视频的读取

    示例代码: #include <opencv.hpp> using namespace cv; int main() { VideoCapture Capture(); //打开默认摄像头 ...

  9. opencv图片压缩视频并读取

    import os import cv2 import numpy as np import time path = './new_image/' filelist = os.listdir(path ...

随机推荐

  1. 参考C++STL标准库中对了的使用方法

    http://www.cppblog.com/zhenglinbo/archive/2012/09/18/191170.html 参考:http://www.cppblog.com/zhenglinb ...

  2. JVM基础(6)-常用参数总结

    参考文章: 并发编程网:http://ifeve.com/useful-jvm-flags-part-4-heap-tuning/ 一.参数分类 HotSpot JVM 提供了三类参数. 第一类包括了 ...

  3. HUST 1404 Hamming Distance(字符串)

    Hamming Distance Description Have you ever heard of the Hamming distance. It is the number of positi ...

  4. LeetCode OJ 229. Majority Element II

    Given an integer array of size n, find all elements that appear more than ⌊ n/3 ⌋ times. The algorit ...

  5. 12c 补丁架构 以及opatch 功能

    cd $ORACLE_HOME/ccr/bin ./emocmrsp oracle@qc550705:/oracle/app/oracle/product/12.1.0.2/db_1/ccr/bin& ...

  6. CentOS 6.4 系统下的MySQL的主从库配置

    首先了解到一. 二一.(MySQL下创建用户并且赋予权限)root用户创建yong用户的SQL语句 CREATE USER 'yong'@'localhost' IDENTIFIED BY 'yong ...

  7. QTP如何连接/查询数据库

    在日常测试工作中经常会遇到有关于数据的测试,比如数据的正确性,完整性,测试人员造的测试数据预期与实际程序运行结果是否一致,如果这个时候数据量比较多的情况下,通过人工比对无疑是一项非常耗时,而且安全系数 ...

  8. Android软件盘InputMethodManager

    调用下面代码:(第一次调用显示,再次调用则隐藏,如此反复),this指activity InputMethodManager imm = (InputMethodManager)this.getSys ...

  9. Fine Uploader 简单配置方法

    由于jquery.uploadify是基于flash的jquery上传控件,客户老是说出问题,所以今天换成了一个纯js的异步上传控件. 这方面的资料很少,故此记下来分享一下. 项目地址:Fine Up ...

  10. 矩阵快速幂AC代码HDU 2035

    #include <iostream> using namespace std;const int MOD = 1000;//像这样的一个常量就应该专门定义一下 int PowMod(in ...