cvCreateVideoWriter写出AVI文件为空
2017-11-11 21:53
435 查看
cvCreateVideoWriter写出AVI文件为空
运行第二章的第十个例子“写入AVI视频文件”时,写到磁盘的avi文件总是为空
程序如下:
#include "stdafx.h"
#include <opencv2\opencv.hpp>
#include <iostream>
#include <opencv\cv.hpp>
#include "cv.h"
#include "highgui.h"
#include <cstring>
#include <fstream>
#include <iterator>
#include <vector>
using namespace cv;
int _tmain(int argc, _TCHAR* argv[])
{
CvCapture *capture = 0;
capture = cvCreateFileCapture("E:\\me.mp4");//获取视频
if (!capture){ return -1; };
IplImage* bgr_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));//视频流中的帧高度
CvVideoWriter *writer = cvCreateVideoWriter("E:\\me1.avi",-1, fps, size);
//CV_FOURCC('M','J','P','G')//表示codec的四个字符
IplImage* logpolar_frame = cvCreateImage(size, IPL_DEPTH_8U, 3);
while ((bgr_frame = cvQueryFrame(capture))!=NULL)
{
cvLogPolar(bgr_frame, logpolar_frame, cvPoint2D32f(bgr_frame->width/2,bgr_frame->height/2),
40, CV_INTER_LINEAR + CV_WARP_FILL_OUTLIERS);
cvWriteFrame(writer, logpolar_frame);
}
cvReleaseVideoWriter(&writer);
cvReleaseImage(&logpolar_frame);
cvReleaseCapture(&capture);
return 0;
}
cvCreateVideoWriter()
它要放的参数分别为AVI文件名,AVI格式,FPS,CvSize数据结构及AVI文件的颜色种类,AVI的格式有很多种,由于影片有很多各个不同的压缩格式,因此,被分为非常多类,许多的种类也只是在学术界采用,real
player及media player很多都不适用,这边压缩格式的规格分为:
CV_FOURCC('P','I','M','1') MPEG-1 codec
CV_FOURCC('M','J','P','G') motion-jpeg codec (does not work well)
CV_FOURCC('M', 'P', '4', '2') MPEG-4.2 codec
CV_FOURCC('D', 'I', 'V', '3') MPEG-4.3 codec
CV_FOURCC('D', 'I', 'V', 'X') MPEG-4 codec
CV_FOURCC('U', '2', '6', '3') H263 codec
CV_FOURCC('I', '2', '6', '3') H263I codec
CV_FOURCC('F', 'L', 'V', '1') FLV1 codec
它的压缩格是参数方法被定义在"highgui.h"里的
解决方式:
cvCreateVideoWriter的使用说明中有一句话:Under Win32 it is possible
to pass -1 in order to choose compression method and additional compression parameters from dialog。使用-1替换CV_FOURCC,运行时会有提示让你自己选择 codec:
CvVideoWriter *writer = cvCreateVideoWriter(output,-1,fps,size);
出现如下提示:
![](https://img-blog.csdn.net/20160605111535530)
选择其中一个,继续运行,就可以成功写出文件了。
补充:cvWriteFrame不支持ROI
版本:2.4.3
问题:VideoWriter保存的视频不支持中文路径
解决办法:原来VideoWriter是调用ffmpeg编码,它只支持utf8格式的路径,所以在中文系统中不支持中文路径,把中文路径转换为utf8格式的路径就行。
有一点奇怪就是,不知为什么VideoCapture却支持中文路径。
运行第二章的第十个例子“写入AVI视频文件”时,写到磁盘的avi文件总是为空
程序如下:
#include "stdafx.h"
#include <opencv2\opencv.hpp>
#include <iostream>
#include <opencv\cv.hpp>
#include "cv.h"
#include "highgui.h"
#include <cstring>
#include <fstream>
#include <iterator>
#include <vector>
using namespace cv;
int _tmain(int argc, _TCHAR* argv[])
{
CvCapture *capture = 0;
capture = cvCreateFileCapture("E:\\me.mp4");//获取视频
if (!capture){ return -1; };
IplImage* bgr_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));//视频流中的帧高度
CvVideoWriter *writer = cvCreateVideoWriter("E:\\me1.avi",-1, fps, size);
//CV_FOURCC('M','J','P','G')//表示codec的四个字符
IplImage* logpolar_frame = cvCreateImage(size, IPL_DEPTH_8U, 3);
while ((bgr_frame = cvQueryFrame(capture))!=NULL)
{
cvLogPolar(bgr_frame, logpolar_frame, cvPoint2D32f(bgr_frame->width/2,bgr_frame->height/2),
40, CV_INTER_LINEAR + CV_WARP_FILL_OUTLIERS);
cvWriteFrame(writer, logpolar_frame);
}
cvReleaseVideoWriter(&writer);
cvReleaseImage(&logpolar_frame);
cvReleaseCapture(&capture);
return 0;
}
(注意,程序是应景改好的,错误的在书上)
调试时发现得到的writer为空,因为需要具备相应的 codec才能成功。
并且,记得用 cvReleaseVideoWriter()把CvVideoWriter数据结构释放,cvReleaseVideoWriter()非常重要,
因为AVI文件的文件格式收尾就是要用到cvReleaseVideoWriter(),也就是说,如果不用到 cvReleaseVideoWriter(),AVI文件就无法打开.
cvCreateVideoWriter()
它要放的参数分别为AVI文件名,AVI格式,FPS,CvSize数据结构及AVI文件的颜色种类,AVI的格式有很多种,由于影片有很多各个不同的压缩格式,因此,被分为非常多类,许多的种类也只是在学术界采用,real
player及media player很多都不适用,这边压缩格式的规格分为:
CV_FOURCC('P','I','M','1') MPEG-1 codec
CV_FOURCC('M','J','P','G') motion-jpeg codec (does not work well)
CV_FOURCC('M', 'P', '4', '2') MPEG-4.2 codec
CV_FOURCC('D', 'I', 'V', '3') MPEG-4.3 codec
CV_FOURCC('D', 'I', 'V', 'X') MPEG-4 codec
CV_FOURCC('U', '2', '6', '3') H263 codec
CV_FOURCC('I', '2', '6', '3') H263I codec
CV_FOURCC('F', 'L', 'V', '1') FLV1 codec
它的压缩格是参数方法被定义在"highgui.h"里的
解决方式:
cvCreateVideoWriter的使用说明中有一句话:Under Win32 it is possible
to pass -1 in order to choose compression method and additional compression parameters from dialog。使用-1替换CV_FOURCC,运行时会有提示让你自己选择 codec:
CvVideoWriter *writer = cvCreateVideoWriter(output,-1,fps,size);
出现如下提示:
选择其中一个,继续运行,就可以成功写出文件了。
补充:cvWriteFrame不支持ROI
版本:2.4.3
问题:VideoWriter保存的视频不支持中文路径
解决办法:原来VideoWriter是调用ffmpeg编码,它只支持utf8格式的路径,所以在中文系统中不支持中文路径,把中文路径转换为utf8格式的路径就行。
有一点奇怪就是,不知为什么VideoCapture却支持中文路径。
相关文章推荐
- 完美cvCreateVideoWriter写出AVI文件为空的问题
- 关于cvCreateFileCapture以及cvCreateVideoWriter的avi读写方法(Xcode)
- kinect使用cvCreateVideoWriter不成功,depth.avi和rgb.avi为0字节的解决方法
- cvCreateVideoWriter 创建视频文件写入器 用法
- Learning OpenCV: cvCreateVideoWriter to save AVI video file
- AVI(Audio Video Interleaved的缩写)是一种RIFF(Resource Interchange File Format的缩写)文件格式
- cvCreateVideoWriter的返回值总是0x00000000的问题
- cvCreateVideoWriter的用法
- 捕获video&audio录制AVI文件
- opencv 将视频读为图片放在指定文件夹中/将指定文件夹中图片读出并合成视频 cvCreateVideoWriter试分析
- 使用cvCreatVideoWriter和cvWriteFrame将图片或数据帧写入到AVI中
- 解决"cvCreateVideoWriter保存视频帧压缩格式只能用-1"的问题
- 用XmlTextWriter写出的XML文件没有换行,用记事本打开XML文件的时候都写在了一行上,请问怎样加入换行!
- cvCreateVideoWriter 录制视频的一个可用程序
- opencv VideoWriter 保存空文件,只有6k
- 解决"cvCreateVideoWriter保存视频帧压缩格式只能用-1"的问题
- OPENCV 录制视频0KB cvCreateVideoWriter返回值为NULL
- 视频压缩cvCreateVideoWriter()的问题
- opencv cvCreateVideoWriter()参数
- cvCreateVideoWriter 录制视频的一个可用程序