将一个视频转换为一个极坐标视频


/*
将一个视频转换为一个极坐标视频
*/
#include "opencv/cv.h"
#include "opencv/highgui.h"

int main(int argc,char** argv)
{
	CvCapture* capture = 0;//视频读入设备
	capture = cvCaptureFromFile(argv[1]);// 打开视频
	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(//创建视频写入设备
		argv[2],
		CV_FOURCC('M','J','P','G'),//编码格式
		fps,
		size
		);
	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

         创建视频文件写入器

typedef struct CvVideoWriter CvVideoWriter;
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 下支持这个标志)。
函数 cvCreateVideoWriter 创建视频写入器结构。



cvWriteFrame
         写入一帧到一个视频文件中
int cvWriteFrame( CvVideoWriter* writer, const IplImage* image );

writer
         视频写入器结构。

image
         被写入的帧。

函数 cvWriteFrame 写入/附加到视频文件一帧。



cvGetCaptureProperty
         获得视频获取结构的属性
double cvGetCaptureProperty( CvCapture* capture, int property_id );

capture
         视频获取结构。

property_id
         属性标识。可以是下面之一:
         CV_CAP_PROP_POS_MSEC - 影片目前位置,为毫秒数或者视频获取时间戳
         CV_CAP_PROP_POS_FRAMES - 将被下一步解压/获取的帧索引,以 0 为起点
         CV_CAP_PROP_POS_AVI_RATIO - 视频文件的相对位置(0 - 影片的开始,1 - 影片的结尾)
         CV_CAP_PROP_FRAME_WIDTH - 视频流中的帧宽度
         CV_CAP_PROP_FRAME_HEIGHT - 视频流中的帧高度
         CV_CAP_PROP_FPS - 帧率
         CV_CAP_PROP_FOURCC - 表示 codec 的四个字符 CV_CAP_PROP_FRAME_COUNT - 视频文件中帧的总数

函数 cvGetCaptureProperty 获得摄像头或者视频文件的指定属性。

译者注:
有时候这个函数在 cvQueryFrame 被调用一次后,再调用 cvGetCaptureProperty才会返回正确的数值。



转换效果:


转换前:


转换后:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值