opencv实现读取视频保存视频

不得不说opencv是个强大的东东,以前做一个项目的一个模块时使用到进行图形处理,这次是想将一个视频的播放放慢,以前在网上看到opencv有这个功能,今天就不小心尝试了下,东西不多,主要是做个小记录还有一点要注意的小问题说一下,代码不多,基本上也都是copy的网上的

#include <iostream>
#include <assert.h>
#include <opencv/cv.h>
#include <opencv/highgui.h>
#include <math.h> 

using namespace std;
#ifdef NDEBUG
#pragma comment(lib, "highgui210.lib")
#pragma comment(lib, "cxcore210.lib")
#pragma comment(lib, "ml210.lib")
#pragma comment(lib, "cv210.lib")
#else
#pragma comment(lib, "highgui210d.lib")
#pragma comment(lib, "cxcore210d.lib")
#pragma comment(lib, "ml210d.lib")
#pragma comment(lib, "cv210d.lib")
#endif 

char g_fileName[] = "C:\\Users\\Desktop\\test.avi";
char g_winodwName[] = "Cv Test";
int main()
{
 ::cvNamedWindow("g_winodwName", CV_WINDOW_AUTOSIZE);
 CvCapture *pCvCapture = NULL;
 pCvCapture = cvCreateFileCapture(g_fileName);
 assert(NULL != pCvCapture);
 IplImage *pIplFrame = NULL; 

 char out1[] = "C:\\Users\\Desktop\\out1.avi";
 double fps1 = cvGetCaptureProperty(pCvCapture,
     CV_CAP_PROP_FPS); 

 CvSize size1 = cvSize((int)cvGetCaptureProperty(pCvCapture,
       CV_CAP_PROP_FRAME_WIDTH),
    (int)cvGetCaptureProperty(pCvCapture,
       CV_CAP_PROP_FRAME_HEIGHT)); 

 CvVideoWriter *wrVideo1 = cvCreateVideoWriter(out1,
       CV_FOURCC('X','V','I','D'),
       10,
       size1);
 IplImage *gray1 = cvCreateImage(size1,8,1); 

 while (true)
 {
 pIplFrame = cvQueryFrame(pCvCapture);
 if (NULL == pIplFrame)
 {
  break;
 }
 else
 {
  ::cvShowImage(g_winodwName, pIplFrame);
  //保存视频文件
  cvCvtColor(pIplFrame,gray1,CV_RGB2GRAY);
  cvWriteFrame(wrVideo1,gray1); 

  if (27 == ::cvWaitKey(120))
  {
  break;
  }
 }
 } 

 ::cvReleaseImage(&pIplFrame);
 ::cvDestroyWindow(g_winodwName);
 ::cvReleaseImage(&gray1);
 ::cvReleaseVideoWriter(&wrVideo1); 

 return cin.get();
}

有几个小地方需要注意下,第一个就是cvCreateFileCapture()这个函数如果路径正确还是返回NULL,则一般是因为没有安装解码器,一般有两个解码器k_lite和xvid,具体哪一个能行我不肯定,因为我试的时候两个都装了然后就正确运行了,还有一个就是cvCreateVideoWriter() 这个函数里面的参数,第三个参数是设置视频播放帧,数字越小,播放的速度越慢,应该每秒的帧数,保存视频的原理也是将图像帧保存到视频文件中。也就是说视频的播放是一个个图片帧的快闪。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

您可能感兴趣的文章:

  • Linux下利用Opencv打开笔记本摄像头问题
  • 详解使用JavaCV/OpenCV抓取并存储摄像头图像
  • Opencv实现视频播放与进度控制
  • opencv实现图片与视频中人脸检测功能
  • Opencv实现读取摄像头和视频数据
(0)

相关推荐

  • Linux下利用Opencv打开笔记本摄像头问题

    新建test文件夹,文件夹存在test.cpp和CMakeLists.txttest.cpp#include <iostream> #include <string> #include <sstream> #include <opencv2/core.hpp> #include <opencv2/highgui.hpp> #include <opencv2/videoio.hpp> using namespace cv; using

  • Opencv实现视频播放与进度控制

    视频画面本质上是由一帧一帧的连续图像组成的,播放视频其实就是在播放窗口把一系列连续图像按一定的时间间隔一幅幅贴上去实现的. 人眼在连续图像的刷新最少达到每秒24帧的时候,就分辨不出来图像间的闪动了,使人感觉呈现出来的是连续的画面,视频的播放就是利用了这一点.我们知道,电影被称为"24帧的艺术",意思就是电影画面每秒刷新24帧,即每秒显示24副图像,它的帧率(Frames per Second,简称:FPS)为24. 一般情况下帧率要大于等于24,以下先测试一下两个视频文件的帧率,一个是

  • opencv实现图片与视频中人脸检测功能

    本文实例为大家分享了opencv实现人脸检测功能的具体代码,供大家参考,具体内容如下 第一章:反思与总结 上一篇博客我相信自己将人脸检测中的AdaBoost算法解释的非常清晰了,以及如何训练人脸检测的强分类器:人脸检测中AdaBoost算法详解.事后,自我感觉对这个人脸检测还是不够具体,所以自己抽了一下午的时间用opencv实现图片与视频中的人脸检测,下面是我用vs2013加opencv4.9来实现的.做一下声明,我的代码是参考OpenCV实现人脸检测的一个博客写的,非常感谢这位博主,我学到了很

  • 详解使用JavaCV/OpenCV抓取并存储摄像头图像

    本程序通过JFrame实时显示本机摄像头图像,并将图像存储到一个缓冲区,当用户用鼠标点击JFrame中任何区域时,显示抓取图像的简单动画,同时保存缓冲区的图像到磁盘文件中.点击JFrame关闭按钮可以退出程序. 实现: import java.awt.Graphics2D; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; imp

  • Opencv实现读取摄像头和视频数据

    实际上,按一定速度读取摄像头视频图像后,便可以对图像进行各种处理了. 那么获取主要用到的是VideoCapture类,一个demo如下: //如果有外接摄像头,则ID为0,内置为1,否则用0就可以表示内置摄像头 cv::VideoCapture cap(0); //判断摄像头是否打开 if(!cap.isOpened()) { return -1; } cv::Mat myframe; cv::Mat edges; bool stop = false; while(!stop) { //获取当前

  • opencv实现读取视频保存视频

    不得不说opencv是个强大的东东,以前做一个项目的一个模块时使用到进行图形处理,这次是想将一个视频的播放放慢,以前在网上看到opencv有这个功能,今天就不小心尝试了下,东西不多,主要是做个小记录还有一点要注意的小问题说一下,代码不多,基本上也都是copy的网上的 #include <iostream> #include <assert.h> #include <opencv/cv.h> #include <opencv/highgui.h> #inclu

  • C#+EmguCV使用摄像头读取、保存视频

    本文实例为大家分享了C#+EmguCV使用摄像头读取.保存视频的具体代码,供大家参考,具体内容如下 在Emgucv中调用摄像头需要用到VideoCapture类 这个类有四种重载的方式 1.不写参数,那么初始化的时候就会调用默认的摄像头 2.一个int类型的数字,这个数字的含义是摄像头的索引.会按照索引来初始化摄像头 3.一个字符串,这个字符串的含义是文件名或视频流名.初始化会读取视频文件或视频流 4.CaptureType 的枚举 这个枚举的内容很多,这里不再赘述 新建一个控制台应用程序来实现

  • python读取和保存视频文件

    为了获取视频,应该创建一个 VideoCapture 对象.他的参数可以是设备的索引号,或者是一个视频文件.设备索引号就是在指定要使用的摄像头. 一般的笔记本电脑都有内置摄像头.所以参数就是 0.你可以通过设置成 1 或者其他的来选择别的摄像头.之后,你就可以一帧一帧的捕获视频了.但是最后,别忘了停止捕获视频. import numpy as np import cv2 cap=cv2.VideoCapture(0) while (True): ret,frame=cap.read() gray

  • python读取视频流提取视频帧的两种方法

    本文实例为大家分享了python读取视频流提取视频帧的具体代码,供大家参考,具体内容如下 方法一:通过imageio库和skimage库 1. 安装环境: pip install imageio pip install skimage 这时候会报错Please install the `scikit-image` package (instead of `skimage`) 所以按照提示操作即可: pip install scikit-image 环境安装成功. 2.通过python安装ffmp

  • python+opencv打开摄像头,保存视频、拍照功能的实现方法

    以下代码是保存视频 # coding:utf-8 import cv2 import sys reload(sys) sys.setdefaultencoding('utf8') cap = cv2.VideoCapture(0) cap.set(3,640) cap.set(4,480) cap.set(1, 10.0) #此处fourcc的在MAC上有效,如果视频保存为空,那么可以改一下这个参数试试, 也可以是-1 fourcc = cv2.cv.CV_FOURCC('m', 'p', '4

  • pygame+opencv实现读取视频帧的方法示例

    由于pygame.movie.Movie.play() 只支持MPEG格式的视频,且 pygame版本大于1.9.5好像已经不支持这个模块了,所以决定使用与opencv读取视频帧的画面,利用pygame的surface刷新窗口. 有基础的小伙伴,代码还是很好理解,直接上代码 pygame.time.Clock()同步时间 import pygame from pygame.locals import * import cv2 import sys import time FPS = 30 Fra

  • pyqt5+opencv 实现读取视频数据的方法

    1.openCV读取视频数据 import cv2 if __name__ == '__main__': videoPath = "./dataSet/3700000000003_13-38-20.055.mp4" nameWindow = "Detection window" # 窗体名称 cv2.namedWindow(nameWindow) # 设置窗体 capture = cv2.VideoCapture(videoPath) if capture.isOp

  • python使用opencv按一定间隔截取视频帧

    关于opencv OpenCV 是 Intel 开源计算机视觉库 (Computer Version) .它由一系列 C 函数和少量 C++ 类构成,实现了图像处理和计算机视觉方面的很多通用算法. OpenCV 拥有包括 300 多个 C 函数的跨平台的中.高层 API .它不依赖于其它的外部库 -- 尽管也可以使用某些外部库. OpenCV 对非商业应用和商业应用都是免费 的.同时 OpenCV 提供了对硬件的访问,可以直接访问摄像头,并且 opencv 还提供了一个简单的 GUI(graph

  • Python 读取 YUV(NV12) 视频文件实例

    一.YUV 简介 YUV:是一种颜色编码方法,常使用在各个视频处理组件中 Y'UV, YCbCr, YPbPr等专有名词都可以称为 YUV,彼此有重叠 Y表示明亮度(单取此通道即可得灰度图),U和V则是色度.浓度 主流的采样方式有三种,YUV4:4:4,YUV4:2:2,YUV4:2:0 可以根据其采样格式来从码流中还原每个像素点的 YUV 值,进而通过 YUV 与 RGB 的转换公式提取出每个像素点的 RGB 值,然后显示出来 YUV4:2:0 数据在内存中的长度是 3 / 2 * heigt

随机推荐