opencv-寫入AVI視頻文件


#include <cv.h>
#include <highgui.h>
int main(int argc, char **argv)
{
    CvCapture* capture = NULL;
    capture = cvCreateFileCapture("紅動中國設計網視頻素材2185.avi");
    if (!capture) return -1;
    //獲取視頻的第一幀 並存在bgr_frame
    IplImage *bgr_frame = cvQueryFrame(capture);
    //獲得視頻的總幀數 CV_CAP_PROP_FPS 幀率
    double fps = cvGetCaptureProperty(capture, CV_CAP_PROP_FPS); 
    //獲得原始視頻的高度和寬度
    CvSize size = cvSize((int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH),
        (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT));
    ///創建一個視頻文件參數分別表示  新建視頻的名稱 視頻壓縮的編碼格式 新建視頻的幀率 新建視頻的圖像大小
    CvVideoWriter *writer = cvCreateVideoWriter("1ai.avi", CV_FOURCC('M', 'J', 'P', 'G'), fps, size);
    //創建首地址 並分配存儲空間
    IplImage* logpolar_frame = cvCreateImage(size, IPL_DEPTH_8U, 3);
    // 獲取視頻的下一幀
    while ((bgr_frame = cvQueryFrame(capture)) != NULL)
    {
        //將視頻從笛卡爾坐標系轉到極坐標系 參數分別表示 輸入圖像 輸出圖像 變換中心 尺度參數 填充輸出圖像所有參數 + CV_INTER_LINEAR 表示雙線性參值(具體什么意思)
        cvLogPolar(bgr_frame, logpolar_frame, cvPoint2D32f(bgr_frame->width / 2, bgr_frame->height / 2), 80, CV_INTER_LINEAR + CV_WARP_FILL_OUTLIERS);
        //將獲取到的每一幀從笛卡爾坐標系轉到極坐標系后的參數 存到新建的視頻文件
        cvWriteFrame(writer, logpolar_frame);
        //將獲取的視頻通過mainwin窗口進行展示
        cvShowImage("mainwin", logpolar_frame);
        char c = cvWaitKey(33);
        //ESC 默認退出
        if (c == 27) break;
    }
    //釋放程序中申請的空間
    cvReleaseVideoWriter(&writer);
    cvReleaseImage(&logpolar_frame);
    cvReleaseCapture(&capture);
    return(0);
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM