您的位置:首页 > 运维架构

opencv(7)

2016-02-01 20:44 316 查看
#include <cv.h>

#include <highgui.h>

//****************写入avi视频文件*************

int main()

{

CvCapture * capture = 0;//创建结构体

capture = cvCreateFileCapture("D:\\op\\man.avi");//原始视频地址

if (!capture){ return -1; }//读取失败

IplImage *bgr_img = cvQueryFrame(capture);//读取帧

double fps = cvGetCaptureProperty(capture,

CV_CAP_PROP_FPS);//获取capture的fps数据

CvSize imgsize = cvSize((int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH),

(int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT));//获取capture的size信息

CvVideoWriter * writer = cvCreateVideoWriter("D:\\op\\me2.avi",//输出视频被存放的地址

CV_FOURCC('M','J','P','G'),//指定编码格式

fps,//播放的帧率

imgsize);//视频图像的大小

IplImage * logpolar_image = cvCreateImage(imgsize, IPL_DEPTH_8U, 3);//创建转换后的结构体

cvNamedWindow("test_demo7", CV_WINDOW_AUTOSIZE);

while ((bgr_img = cvQueryFrame(capture)) != NULL)//若读取帧不为空

{

cvLogPolar(bgr_img,//原视频image结构体

logpolar_image, //转换后的image结构体

cvPoint2D32f(bgr_img->width / 2, bgr_img->height / 2),//极坐标中心

40,//缩放比例40

CV_INTER_LINEAR + CV_WARP_FILL_OUTLIERS);//转换成对应极坐标的形式;双线性插值+空白部分填充黑色

cvWriteFrame(writer, logpolar_image);//将转换后的logpolar_image写入视频writer

cvShowImage("test_demo7", logpolar_image);//输出图像确实长得很奇怪

char c = cvWaitKey(33);

if (c == 27) break;

}

cvReleaseVideoWriter(&writer);//释放writer

//cvReleaseImage(&bgr_img);bgr_img它不需要释放,否则会出现报错。原因:bgr_img使用的是通过cvqueryframe的capture的内存。当capture被释放后每一帧图像所对应的内存都会被释放。

cvReleaseImage(&logpolar_image);

cvReleaseCapture(&capture);

return (0);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: