1. 环境配置(opencv2.2及以上)

选择2.2及以上版本是因为,在2.1及以下会出现以下两个错误:
(a) Codec的错误,需要你安装相应的解码器,如果你的AVI或其他视频OpenCV不能读,请用格式工厂,暴风影音等转化为其他可处理格式,可以先用格式工厂查看视频相关信息,包括帧率、Codec格式、宽和高等。(可以添加解码器http://hi.baidu.com/yibobin/blog/item/0f574302b7d874134afb5158.html)

(b) 每次运行到cvWiteFrame时就弹出:Unhandled exception at 0x0f941f15 in opencv_test.exe: 0xC0000005: Access violation reading location 0xffffffff(或者是0X00000000,这个取决于你的系统)

我配置的是opencv2.3+VS2008,下载地址http://www.opencv.org.cn/index.php/Download,有两种方法安装:

(1)下载OpenCV for Windows,源代码需编译,需要下载CMakehttp://www.cmake.org/cmake/resources/software.html
CMake打开需编译的OpenCV2.3源代码,配置好Source和Build文件路径后,点Configure一次,选择你需要的模块(模块必须要存在),再点一次Configure,检查是否有错误,如果没有点击Generate。
如图所示(我用的是同一路径)

插曲:比如你需要(如果你不需要当然不需要安装)
Qt 下载 http://qt.nokia.com/downloads-cn
(其安装配置见a.http://hi.baidu.com/yibobin/blog/item/5a3098ee801211f6b3fb9551.html
b.http://hi.baidu.com/yibobin/blog/item/fe810efce0875a9ab801a036.html 和 http://hi.baidu.com/yibobin/blog/item/f0f355ee7abae23e2cf53401.html)
CuDa 下载http://developer.nvidia.com/cuda-toolkit-40 (如果是64位机器和操作系统,可以安装64位,其也包含32位)
(其安装配置见http://hi.baidu.com/yibobin/blog/item/6969f7d384f0601c3bf3cfea.html)

接下来,就是编译OpenCV2.3的源文件了,在CMake之后,会在你CMake Build的路径文件夹中生成OpenCV.sln,如图所示:

生成解决方案即可,不过需要生成Debug和Release两个版本。如果你人品很好,上面的都一切OK的话,接下来进行VS2008的配置:
首先,将CMake Source路径下文件中的modules下这些文件夹中(如下图所示)的\include\opencv2下的文件夹拷贝到CMake Build路径下文件中的\include\opencv2中。

然后,将D:\OpenCV-2.3.0\bin\Debug和D:\OpenCV-2.3.0\bin\Release放入系统环境变量,配置VS2008的选项->项目和解决方案,如下图所示:

将下面的加入包含文件中:D:\OpenCV-2.3.0\include  和 D:\OpenCV-2.3.0\include\opencv
再将下面的加入库文件中:D:\OpenCV-2.3.0\lib\Debug 和 D:\OpenCV-2.3.0\lib\Release
最后,就可以编写程序试试了,大功告成一大部分!

(2)另一种方法下载下面两个文件,然后按照readme配置好,这是官方已经编译好的,解压下面两个文件,讲支持GPU的解压文件拷贝到superpack解压后的文件夹中,注意拷贝的位置要正确!

  • OpenCV for Windows(已使用VC2008编译,支持GPU运算)
  • OpenCV for Windows,superpack
    其余在VS2008下配置如上,即(1)中方法。

    2. 图片和视频相互转换
    为了方便,我们使用自然数进行图片命名!

    (1)Video to Image

    CvCapture *capture = cvCaptureFromAVI("a1.avi");  // 读取视频
    cvSetCaptureProperty(capture, CV_CAP_PROP_POS_FRAMES, 10500); // 设置属性,我们从10500帧开始
    int num_frm = cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_COUNT); // 获取总的帧数
    int count = 10500;  // 设置开始抓取的帧
    while( cvGrabFrame(capture) && count <= 21000) // 抓当前帧
    {
      IplImage* pFrame = cvRetrieveFrame(capture);// 取回由函数cvGrabFrame抓取的图像

    char test[100]; // 存放文件名
      sprintf(test,".\\2\\%d%s",count,".jpg"); // 文件名格式
      cvSaveImage(test,pFrame); // 保存图像文件

    count++; // 抓下一帧,回到while中的cvGrabFrame
    }

    cvReleaseCapture(&capture); // 释放CvCapture结构

    (2)Image to Video

    int i = 10500;// 存放的文件名开始
    IplImage* img = 0; // 存放图像
    char image_name[13]; // 存放图像名

    printf("------------- image to video ... ----------------\n");

    //初始化视频编写器,参数根据实际视频文件修改,注意有些格式是不能生成的,或生成无用,请参考相关Codec
    CvVideoWriter *writer = 0; // 写视频结构
    int isColor = 1; // 如果非零,编码器将希望得到彩色帧并进行编码;否则,是灰度帧(只有在Windows下支持这个标志)。
    int fps     = 25; // 图像帧率,格式工厂会让你很轻松的了解视频相关信息
    int frameW = 480; // 帧宽,根据你需要的大小修改
    int frameH = 360; // 帧高,同上
    writer=cvCreateVideoWriter("out.avi",CV_FOURCC('D','I','V','X'),fps,cvSize(frameW,frameH),isColor); // 创建

    printf("\tvideo height : %d\n\tvideo width : %d\n\tfps : %d\n", frameH, frameW, fps);

    //创建窗口
    cvNamedWindow( "mainWin", CV_WINDOW_AUTOSIZE );

    while(i<num_frm) // 选择你需要停止的最后一帧图像,我这里num_frm=21000,可自定义
    {
      sprintf(image_name, "%s\\%d%s", "Output3", i++, ".jpg");
      img = cvLoadImage(image_name); // 读取图像
      if(!img)
      {
       printf("Could not load image file...\n");
       exit(0);
      }
      cvShowImage("mainWin", img); // 显示图像
      char key = cvWaitKey(20);
      cvWriteFrame(writer, img); //将该帧图像写入视频
      cvReleaseImage(&img); // 释放图像内存
    }

    cvReleaseVideoWriter(&writer); // 释放结构
    cvDestroyWindow("mainWin"); // 销毁窗口

    3. 实验结果

视频抽帧为图片和一系列图片转换为视频相关推荐

  1. java 视频抽帧_opencv3.2.0实现视频抽帧,并保存成图片

    .实现指定帧数的抽取.和全部帧数的抽取,并保存到指定目录. 在QT新建一个控制台程序,程序源码如下:(程序实现每十帧获取一次帧) #include #include #include #include ...

  2. Python视频抽帧,视频转图片帧并保存

    注(新方法):如果不想用python跑,可以直接终端命令行安装ffmpeg包,然后cd到含有视频文件夹的位置,终端执行: for f in *.mp4; do mkdir -p "${f}_ ...

  3. Java调用ffmpeg进行视频.H264抽帧,并保存为图片

    Java调用ffmpeg进行视频.H264抽帧,并保存为图片 1. 需求 2. 解决 3. 源码 参考 1. 需求 对视频 D:\data\01-test.H264进行抽帧并保存为图片,图片命名为1. ...

  4. 视频抽帧及将图片合成视频

    整理一篇将视频抽帧成图片,然后在将图片合成视频文章!!!听起来就很无聊,但是还是记录以下吧,万一下次在干这种事我就能直接用啦! 1.视频抽帧 ''' 功能:将视频逐帧抽取,在文件夹中保存为图片,可设置 ...

  5. python将视频按帧读取并转换成图片

    python将视频按帧读取并转换成图片 代码如下 from glob import glob import cv2 import tqdm import os video_path = glob(r' ...

  6. Java h265视频抽帧提取照片支持Window,Linux

    Java H265视频抽帧提取照片 1. Windows下可调用ffmpeg.exe实现,亲测可行 2. linux下调用FFmpegFrameGrabber 3. 源码 4. 效果图 5. pom依 ...

  7. 视频数据处理方法!关于开源软件FFmpeg视频抽帧的学习

    点击上方"Datawhale",选择"星标"公众号 第一时间获取价值内容 视频文件是多媒体数据中比较常见的一种,也是入门门槛比较高的一个领域.视频数据相关的领域 ...

  8. python 视频抽帧_FFmpeg视频抽帧那些事

    视频文件是多媒体数据中比较常见的一种,也是入门门槛比较高的一个领域.视频数据相关的领域任务包括视频物体检测.视频物体追踪.视频分类.视频检索和视频摘要抽取等. 视频数据与图像数据非常类似,都是由像素点 ...

  9. 使用ffmpeg从视频中截取图像帧(最简单实用的视频抽帧,一句命令)

    Table of Contents 1.最佳方式 2.普通的命令:(画质差) 3. 视频旋转: 4. 批量视频抽帧: 参考:ffmpeg视频抽帧 1.最佳方式 第二种方法抽帧图片画质很差,这里提供更好 ...

  10. 视频抽帧Java实现

    视频抽帧Java实现 依赖: <!-- https://mvnrepository.com/artifact/org.bytedeco/javacv --><dependency&g ...

最新文章

  1. FD.io/VPP — QoS — Policer CLI
  2. 【Python学习系列五】Python网络爬虫框架Scrapy环境搭建
  3. shell 获取 mysql 行数_一个Shell小脚本精准统计Mysql每张表的行数实现
  4. oracle linux 双机,oracleforlinux双机热备实战完全手册
  5. ws2812b灯带容易坏_吊灯吸顶灯筒灯壁灯射灯灯带LED线条灯……都是个啥?
  6. Android学习之查看网络图片
  7. 无限场景开放式仿真器 PGDrive:Improving the Generalization of End-to-End Driving through Procedural Generation
  8. c#给定二维数组按升序排序_在数组中按升序对数字进行排序| 8086微处理器
  9. python基础(18)之 异常处理
  10. java--jdk安装教程
  11. win7下虚拟显示器完成记(virtual monitor)——VDI显卡透传场景
  12. 一位射频技术支持工程师的工作感悟
  13. 达拉斯大学计算机硕士专业排名,德克萨斯大学达拉斯分校UTD计算机科学Computer Science专业排名第251-300位(2021年THE世界大学商科排名)...
  14. 苹果7pnfc功能门禁卡_苹果NFC功能不再鸡肋?原来还能这么玩,内附门禁卡复制教程...
  15. 百度地图SDK无法定位到当前所在位置;一直显示天安门
  16. 虚拟机安装麒麟系统设置root用户登录和安装wps
  17. SpringBoot+Vue实现前后端分离的校园外卖配送系统
  18. 电脑录屏快捷键是什么?教你一招可以自己设定
  19. 微信朋友圈里,微信群里的早报新闻简报都是哪里来的呢?
  20. 关于Native Library在NetbeansRCP应用中的设置

热门文章

  1. 车载显示屏申请E-mark认证需要测试些什么?
  2. linux su无效_linux系统 su切换用户失败情况
  3. excel表格横向纵向变换_什么是报表工具?和 EXCEL 有什么区别?
  4. 轻量应用服务器 饥荒,饥荒服务端世界设置生成
  5. 转-手机天猫解耦之路
  6. iOS 15.3+ SwiftUI中List子项目禁止被删除但头部仍显示删除按钮的解决
  7. DNS 114.114.114.114与8.8.8.8
  8. 运维开发团队技能与效率提速利器:运维+低代码
  9. ubuntu系统vim常用命令学习以及ubuntu软件下载安装
  10. Github 最受欢迎的 35 个项目一览