写入视频avi文件(附cvCreateVideoWriter avi文件错误的解决方法)
//
// main.cpp
// Study07
//
// Created by Sean on 16/2/22.
// Copyright © 2016年 Sean. All rights reserved.
//
#include <iostream>
#include "highgui.h"
#include "cv.h"
using namespace std;
int main(int argc, const char * argv[]) {
// insert code here...
cout << "Project start..."<<endl;
char name[]="/Users/sean/Documents/untitled folder/2.avi";
CvCapture* capture = cvCreateFileCapture(name);
if(!capture)
return -1;
IplImage* rgb_frame = cvQueryFrame(capture);
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)
);
// CvSize size =cvGetSize(rgb_frame);
//此处为了严谨,需要从capture中获取尺寸,当然,直接cvGetSize(rgb_frame)也是可以的,结果一样
CvVideoWriter* write = cvCreateVideoWriter
(
"/Users/sean/Documents/untitled folder/3.avi",
CV_FOURCC('j', 'p', 'e', 'g'),
fps,
size
);
IplImage* logpolar_frame = cvCreateImage(size, IPL_DEPTH_8U, 3);
while(rgb_frame)
{
if(cvWaitKey(33)==27)
return -1;
if((rgb_frame = cvQueryFrame(capture)))
cvWriteFrame(write, logpolar_frame);
}
cvReleaseVideoWriter(&write);
cvReleaseImage(&rgb_frame);
cvReleaseCapture(&capture);
return 0;
}
OS X下的avi写入好烦,在stackoverflow网站问了大神,问题终于解决了,具体看代码。csdn里就不说了,问了都没人回答。国内我还没搜到这种使用方法,主要就是cvCreateVideoWriter的用法问题,第二个参数CV_FOURCC国内给的根本就不全,还有N种写法,Mac下用xcode可使用的编码我测试了jpeg可以用,其它方式后面补充,使用的时候cvCreateVideoWriter第二个参数填写CV_FOURCC('J','P','E','G'),这个应该和mac下解码器的安装有关,网上mac的教程少之又少,可以用jpeg代替。