1、cvCreateVideoWriter()中的第二个参数:avi对应的编码格式分别为:
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
将上面的改成 -1 将会打开一个编码器的选择窗口.
2、视频灰度化后写入(转:http://www.pengjun.org.cn/post/22.html)
其中的蓝色代码即可将视频显示出来
=====================================================================
#include <cv.h>
#include <highgui.h>
int main(int argc,char* argv[])
{
//如果输入参数不为3,则退出程序
if(argc!=3) return -1;
//新建CvCapture*类型变量
CvCapture *capture=NULL;
//用cvCreateFileCapture函数从第一个输入参数读入视频文件
capture=cvCreateFileCapture(argv[1]);
//如果读入视频文件失败,则退出程序
if(!capture) return -1;
//用cvQueryFrame函数获取视频文件的第一帧保存到bgr_frame中
IplImage *bgr_frame=cvQueryFrame(capture);
//用cvGetCaptureProperty函数获取视频文件的帧率,使输入视频的帧率与其一致
double fps=cvGetCaptureProperty(capture,CV_CAP_PROP_FPS);
//用cvSize函数建立一个CvSize类型的变量size,其宽度和高度与输入视频文件相同
CvSize size=cvSize((int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_WIDTH),
(int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_HEIGHT));
//用cvCreateVideoWriter函数新建一个CvVideoWriter*类型变量,用来输出视频文件
CvVideoWriter *writer=cvCreateVideoWriter(argv[2],CV_FOURCC('M','J','P','G'),
fps,size);
cvnamedWindow("mainwin", CV_WINDOW_AUTOSIZE);//创建一个窗口显示修改后的视频;
//用cvCreateImage函数创建一个IplImage*类型变量logpolar_frame
IplImage *logpolar_grame=cvCreateImage(size,IPL_DEPTH_8U,3);
//用cvQueryFrame函数继续读入输入视频文件,直到文件尾
while((bgr_frame=cvQueryFrame(capture))!=NULL)
{
//用cvLogPolar函数把图像映射到极指数空间
cvLogPolar(bgr_frame,logpolar_grame,cvPoint2D32f(bgr_frame->width/2,
bgr_frame->height/2),40,CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS);
//用cvWriteFrame函数将极指数空间的图像保存到writer中
cvWriteFrame(writer,logpolar_frame);
cvShowImage("mainwin", logpolar_frame); //在mainwin窗口中显示生成的视频;
char c=cvWaitkey(33);
if (c == 27) break; //当输入ESC键时,退出窗口;
}
//转化完毕,用cvReleaseVideoWriter函数释放CvVideoWriter*类型变量所占内存空间
cvReleaseVideoWriter(&writer);
//用cvReleaseImage函数释放IplImage*类型变量所占内存空间
cvReleaseImage(&logpolar_frame);
//用cvReleaseCapture函数释放CvCapture*类型变量所占内存空间
cvReleaseCapture(&capture);
//程序结束,返回0
return 0;
}
需要记住:
1、用cvCreateVideoWriter函数创建视频文件写入器,其具体参数如下:
CvVideoWriter* cvCreateVideoWriter( const char* filename, int fourcc, double fps,
CvSize frame_size, int is_color=1 );
filename:输出视频文件名。
fourcc:四个字符用来表示压缩帧的codec 例如,CV_FOURCC('P','I','M','1')是MPEG-1 codec,
CV_FOURCC('M','J','P','G')是motion-jpeg codec等。
在Win32下,如果传入参数-1,可以从一个对话框中选择压缩方法和压缩参数。
fps :被创建视频流的帧率。
frame_size :视频流的大小。
is_color :如果非零,编码器将希望得到彩色帧并进行编码;否则,是灰度帧(只有在Windows下支持这个标志)。
2、 用cvLogPolar函数将图像映射到极指数空间(与极坐标类似,不过横坐标是去Log之后的值)。具体参数:
void cvLogPolar( const CvArr* src, CvArr* dst,
CvPoint2D32f center, double M,
int flags=CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS );
src :输入图像。
dst :输出图像。
center :变换的中心,输出图像在这里最精确。
M :幅度的尺度参数,见下面公式:
rho=M*log(sqrt(x2+y2))
phi=atan(y/x)
flags :插值方法和以下选择标志的结合;
CV_WARP_FILL_OUTLIERS -填充输出图像所有像素,如果这些点有和外点对应的,则置零。
CV_WARP_INVERSE_MAP - 表示矩阵由输出图像到输入图像的逆变换,并且因此可以直接用于像素插值。否则,函数从map_matrix中寻找逆变换。
fillval :用于填充外点的值。
函数cvLogPolar用以下变换变换输入图像:
正变换 (CV_WARP_INVERSE_MAP 未置位): dst(phi,rho)<-src(x,y)
逆变换 (CV_WARP_INVERSE_MAP 置位): dst(x,y)<-src(phi,rho),
此函数模仿人类视网膜中央凹视力,并且对于目标跟踪等可用于快速尺度和旋转变换不变模板匹配。
3、用CvPoint2D32f函数来创建一个二维坐标下的点,类型为浮点,其定义如下:
typedef struct CvPoint2D32f
{
float x; /* X坐标, 通常以0为基点*/
float y; /* Y坐标, 通常以0为基点*/
}
CvPoint2D32f;
/* 构造函数 */
inline CvPoint2D32f cvPoint2D32f( double x, double y );
/* 从CvPoint转换来 */
inline CvPoint2D32f cvPointTo32f( CvPoint point );
4、用cvWriteFrame函数将一帧图像写入到视频文件写入器中。
5、用cvReleaseVideoWriter来释放视频写入器的所占的内存空间
分享到:
相关推荐
OpenCV视频的保存以及显示,中间对waitKey延时等待有一个小小的均衡策略
基于opencv的AVI视频读写程序,《learning opencv》的例程
2.直觉反应是在写入视频的时候,写入的帧图像存储格式和写入器定义的帧图像格式不符,导致内存报错 3.接收源代码发现有一段代码是这么写的: CvVideoWriter *writer = cvCreateVideoWriter( "myvideo.avi", CV_...
该CPP应用Opencv的Mat对图像数据进行读取,里面包括单通道、三通道的图像数据的读取和写入等四种方式
基于opencv的摄像头视频抓取,并能将摄像头抓取的视频写入avi文件中,操作简单,运行程序即可实现功能
解决用opencv保存视频0kb的问题 吧适合初学者
今天小编就为大家分享一篇opencv3/C++实现视频读取、视频写入,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
修复了视频目标标注工具2中部分bug,利用该工具可以对avi视频进行播放,截取感兴趣区域目标,并将其相关信息写入txt文件。该工具增加快捷键,利用键盘方便操作。
编译opencv4.5.4 出现opencv_videoio_ffmpeg_64 下载失败 后程序运行MP4写入失败 [ INFO:0] global F:\opencv\opencv\sources\modules\videoio\src\videoio_registry.cpp (223) cv::`anonymous-namespace'::...
编译好的opencv.js+测试页,前端计算机视觉处理,图片处理,视频处理
今天小编就为大家分享一篇OpenCV2从摄像头获取帧并写入视频文件的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
分享一下自己的想法,整体思路是PIL模块中的ImageGrab不停的获得当前屏幕,利用opencv写入视频流话不多说,直接上代码,有什么更好的建议,欢迎大家交流! """python + opencv 实现屏幕录制_by-_Zjh_""" from PIL ...
它首先定义了一个VideoWriter对象,用于将帧写入视频文件。然后,它使用pyautogui库获取屏幕截图,并将其转换为numpy数组。接下来,它将颜色空间从BGR转换为RGB,并将帧写入视频文件。最后,它使用cv2.imshow()函数...
写入AVI视频文件 小结 练习 第3章 初探OpenCV OpenCV的基本数据类型 CvMat矩阵结构 IplImage数据结构 矩阵和图像操作 绘图 数据存储 集成性能基元 小结 练习 第4章 细说HighGUI 一个可移植的图形工具包 创建窗口 ...
开始准备 初试牛刀—— 显示图像 第二个程序—— 播放AVI视频 视频播放控制 一个简单的变换 一个复杂一点的变换 从摄像机读入数据 写入AVI视频文件 小结 练习 第3章 初探OpenCV OpenCV的基本数据类型 CvMat矩阵结构 ...
本人亲写的基于vs2010和Opencv2.4.9 视频和图像相互转化,读入视频,写入视频的程序,适合做视频处理的基础程序。
学习OpenCV 例2-10 写入AVI视频文件源码 运行通过
做运动分析检测,需要有一定的素材视频,但是素材视频的编码OpenCV不能识别,无法对指定的视频做实验,怎么素材视频通用化使得OpenCV能正常识别? 二、解决的方法 (1)素材视频总是有配套的播放器来播放,那么...