基于OpenCV的视频压缩-对数极坐标格式

4 篇文章 0 订阅

使用cvCreateVideoWriter函数,可以将视频流写入视频文件;

使用cvLogPolar函数,可以将每一帧图像转换为对数极坐标格式,

最后将转换后的图像序列写入新的视频文件中。

//将一个video转换为灰度级

#include <opencv\cv.hpp>
#include <opencv2\highgui\highgui.hpp>

int main(int argc, char* argv[]) {
	CvCapture *capture = 0;
	capture = cvCreateFileCapture("movie.avi");//加载视频文件
	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( //初始化视频输出文件
		"video.avi",//输出video文件的名字
		//CV_FOURCC('M', 'J', 'P', 'G'),//视频压缩的编码格式
		CV_FOURCC('M', 'J', 'P', 'G'),//视频压缩的编码格式
		fps,			//指定视频的帧率
		size,			//指定视频图像的大小
		1);				//默认是1
	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);
}

下面就是视频转化为极坐标格式的画面:

Note:1.视频压缩格式如下:

CV_FOURCC('P', 'I', 'M', '1') = MPEG-1 codec
CV_FOURCC('M', 'J', 'P', 'G') = motion-jpeg codec
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

2.输出视频流文件务必要使用avi格式,不要采用mp4格式的视频文件。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值