1. 程式人生 > >opencv中視訊的儲存(兩個版本的)

opencv中視訊的儲存(兩個版本的)

在對視訊進行處理時,很多需要儲存處理後的結果,因而想借助於opencv將處理過後的視訊儲存下來。opencv中儲存視訊的方式分為 VideoWriter和CvVideoWriter兩個版本的,其中前者是對應Mat,後者對應的是IplImage*的。現在多用的是前者,但很多較老的程式碼中還是用的CvVideoWriter這中方式的,本文對這兩種都簡要介紹一下。首先是VideoWriter,基本就是將視訊的每一幀讀入到要儲存的視訊中。

#include <opencv2/core/core.hpp>  
#include <opencv2/highgui/highgui.hpp>  
  
using namespace cv;  
  
void main()  
{  
    VideoCapture capture(0);  
   VideoWriter writer("VideoTest.avi", CV_FOURCC('M', 'J', 'P', 'G'), 25.0, Size(640, 480));  
  
 
    while (capture.isOpened())  
    {  
  Mat frame;  
     
if ((frame.rows==0)||(frame.cols==0))
{
printf("frame capture failed\n");
system("pause");
exit(0);
}
        capture >> frame;  
        writer << frame;  
        imshow("video", frame);  
        if (cvWaitKey(20) == 27)  
        {  
            break;  
        }  
    }  
}  

其中VideoWriter writer("VideoTest.avi", CV_FOURCC('M''J''P''G'), 25.0, Size(640, 480));這一行程式碼中後面的兩個引數分別是幀率與儲存視訊的寬和高。一般可利用下列兩行程式碼獲取,上述示例程式碼中為了方便,直接用的指定的值。

int rate = capture.get(CV_CAP_PROP_FPS);//幀率
writer.open("C:\\Users\\lenovo\\Documents\\04.avi",CV_FOURCC('M', 'J', 'P', 'G'),rate,Size(frame.cols,frame.rows),true);


第二中就是CvVideoWriter,其程式碼也基本一樣,只是老版本的opencv中的用法。

    char videoName[128] = "F://test//test1.mp4";//要處理的視訊
    char reslutVideoName[128] = "F://result//result3.avi";//處理好儲存的視訊,只能儲存為AVI格式

    CvCapture* capture0 = cvCaptureFromFile(videoName);
    if (!capture0) {
        fprintf(stderr, "Couldn't initialize capturing....\n");
    }

    CvSize size = cvSize(
        (int)cvGetCaptureProperty(capture0, CV_CAP_PROP_FRAME_WIDTH),
        (int)cvGetCaptureProperty(capture0, CV_CAP_PROP_FRAME_HEIGHT));

    // video writer
    CvVideoWriter* writer = cvCreateVideoWriter(reslutVideoName, CV_FOURCC('M', 'J', 'P', 'G'), 25,size);
    IplImage* frame = NULL;
    while(1)
    {
        frame = cvQueryFrame(capture0);
        if (NULL == frame) {
            break;
        }
    //中間省略對frame進行處理的程式碼
        cvWriteFrame(writer, frame);
    }
上述的程式碼都是從我從自己的程式碼中截取出與儲存視訊相關的片段的,應該是可以執行的。(我自己的工程可以成功執行並儲存處理後的視訊)

相關推薦

opencv視訊儲存版本

在對視訊進行處理時,很多需要儲存處理後的結果,因而想借助於opencv將處理過後的視訊儲存下來。opencv中儲存視訊的方式分為 VideoWriter和CvVideoWriter兩個版本的,其中前者是對應Mat,後者對應的是IplImage*的。現在多用的是前者,但很多較

並查集版本

new i++ for void returns parent AR 不知道 stat 1 import java.util.*; 2 3 public class Dis

無聊時寫的俄羅斯方塊分為SDL和Qt版本

app deb fcm cnn 無聊 線程 dac tutorial spi 6213-ChineseZodiac(map) 多線程問題 【CF472G】【XSY2112】DesignTutorial壓位 大家都開始C++0x了,我也來湊熱鬧,今天的主題是《調侃rvalue

Struts2 國際化實現在頁面調換中文英文模式

在原本搭建的Struts上進行新增程式碼頁面(詳情見本人第一篇文章) 建立資原始檔 package com.hnpi.blue; public class ChangeLanguageAction { public String execute(){

二分查詢模板總結遞迴與迴圈遍歷版本

二分查詢: 思路: 在有序*陣列***a[]中查詢K 1,不斷分割 。 2 用中間值去比較。 ====================嘗試比較下面兩種,得到遞迴函式的寫法=========

Linq從edmx資料庫選取資料進行查找出現錯誤解決 指定的 LINQ 表示式包含對與不同上下文關聯的查詢

總思想:不讓兩個連結(connection)同時發生。儘量使用一個EDMX(在一個EDMX中建立另一個的檢視),如果不可以,需要分別進行查詢不能放在一個語句中 1.http://www.cnblogs.com/Joetao/articles/2106426.html cl

C#運算符重載和轉換運算符實例結構

summary explicit IT ret temp oat args col 轉換 struct Celsius {   private float degrees;   public float Degrees   {     get { return

Find a wayBFS

city any queue ret find 初始化 typedef 維數 opened Problem Description Pass a year learning in Hangzhou, yifenfei arrival hometown Ningbo a

WebService入門例項教程 網址

https://www.cnblogs.com/AlanLee/archive/2017/06/02/6933073.html   http://www.iteye.com/topic/1135747     前言:朋友們開始以下教程前,請先看第五大

php-機器人聊天3版本

1.超超超超級簡易的聊天機器人,只會說“你好” 連線php之後,不管後端接收到啥資訊只輸出“你好”給前段,這樣前段就可以發啥對面都會說“你好”。 –php部分 <?php echo "你好!"; -html部分 <h2>第一版</h2&

linux上msyql主從複製gtid,主從全部重啟後no

解決辦法: 1:先到主庫上檢視偏移量(Position) mysql> show master status; +------------------+----------+--------------+------------------+--------------------------

Kafka之——Kafka配置檔案server.properties版本

前言 其實每個版本都有些許改動,只不過改動大小而已,但是網上的教程都真的太老了,其實更新一下也費不了多少時間  0.9.0 # Licensed to the Apache Software Foundation (ASF) under one or more # con

攝像頭視訊處理將ROS節點轉為opencv 影象----cv_bridge 順便顯示相機

#include <ros/ros.h> #include<image_transport/image_transport.h> #include<cv_bridge/cv_bridge.h> #include<sens

error:opencv版本引起沖突

lin conf style cat lib hub remove mov ridge 有多個warning出現。。。版本沖突 解決辦法: cv_bridge[opncv和ros連接起來的橋],默認依賴的oencv版本是2.4.8,如果安裝了新的opencv版本,比如3

vs的程序有debug和release版本的區別

不同的 上進 BE 使用 的區別 debug 存在 通過 最優 vs中的程序有debug和release兩個版本,Debug通常稱為調試版本,通過一系列編譯選項的配合,編譯的結果通常包含調試信息,而且不做任何優化,以為開發 人員提供強大的應用程序調試能力。而Release通

javaleetcode415 字串相加整數儲存成字串的形式,對它們求和Add String

題目描述: 給定兩個字串形式的非負整數 num1 和num2 ,計算它們的和。 注意: num1 和num2 的長度都小於 5100. num1 和num2 都只包含數字 0-9. nu

HibernateSessionFactory是執行緒安全的嗎?Session是執行緒安全的嗎執行緒能夠共享同一個Session嗎

Hibernate中SessionFactory是執行緒安全的嗎?Session是執行緒安全的嗎(兩個執行緒能夠共享同一個Session嗎)? SessionFactory對應Hibernate的一個數據儲存的概念,它是執行緒安全的,可以被多個執行緒併發訪問。 Sessio

Centos7編譯安裝ffmpeg字形容“噁心”以及迴圈播放本地視訊命令

迴圈播放本地視訊 ffmpeg -re -stream_loop -1 -i /root/rtmp/video/sss.mp4 -vcodec copy -acodec copy -f flv rtmp://0.0.0.0:1935/live/test1 /root/rtmp/vi

Android Studio gradle 的為什麼有版本

情景再現 最近開啟Android Studio說要更新專案Gradle版本至4.6,結果build.gradle裡面是這樣的: dependencies { classpath 'com

專案需要到版本的JQuery解決辦法

在專案中需要使用兩個版本的JQuery時,兩個JQuery都會佔用$符號,後引用的JQuery會搶到$符號的使用權,導致無法使用先引用的JQuery. 解決辦法:JQuery中提供了noConflict()函式,該函式返回jQuery物件本身,可以用來取別名,在引入第一個J