Opencv step by step - 视频变换
2014-10-29 22:34
309 查看
这次是变换视频内容并且写入新的文件。
代码如下:
note:因为代码比较少,前几篇博客的代码都是手打的,并且做了一些修改。
//cvLogPolar(org_frame, dest_frame, org_center, 40,
// CV_INTER_LINEAR + CV_WARP_FILL_OUTLIERS);
//cvWriteFrame(dest_writer, dest_frame);
这里注释掉的几行是实际的变换代码,由于变换出来的视频不好看,于是直接使用cvWriteFrame来展示效果。这种变换的应用可以有很多,比如视频的边缘检测,人脸识别等。这里的代码实际上做了一个转码,可以当做一个转码器。
本来想使用H.264的,可惜linux上面默认没有装,所以使用了MJPG的编码。
这个代码是指定编码器的,可以指定很多种,欲知详情,grep一下代码吧。
cvLogPolar是做一个坐标变换,出来的效果是比较扭曲的图像,看起来挺难看的,这里就不用了。
作为转码器,输入的AVI文件有44.4MB,输出的MJPG达到了149.8MB。但是输出之后linux就可以播放啦!
如图:
代码如下:
note:因为代码比较少,前几篇博客的代码都是手打的,并且做了一些修改。
#include <cv.h> #include <highgui.h> int main(int argc, char **argv) { assert(argc == 3); CvCapture *org_capture = cvCreateFileCapture(argv[1]); if(!org_capture) return -1; /* get attribute of org frame */ double org_fps = cvGetCaptureProperty(org_capture, CV_CAP_PROP_FPS); int org_width = cvGetCaptureProperty(org_capture, CV_CAP_PROP_FRAME_WIDTH); int org_height = cvGetCaptureProperty(org_capture, CV_CAP_PROP_FRAME_HEIGHT); CvSize org_size = cvSize(org_width, org_height); CvPoint2D32f org_center = cvPoint2D32f(org_width/2 , org_height/2); /* create new file */ CvVideoWriter *dest_writer = cvCreateVideoWriter(argv[2], CV_FOURCC('M', 'J', 'P', 'G'), org_fps, org_size); /* transform every frame */ IplImage *dest_frame = cvCreateImage(org_size, IPL_DEPTH_8U, 3); IplImage *org_frame = NULL; while(NULL != (org_frame = cvQueryFrame(org_capture))) { //cvLogPolar(org_frame, dest_frame, org_center, 40, // CV_INTER_LINEAR + CV_WARP_FILL_OUTLIERS); //cvWriteFrame(dest_writer, dest_frame); cvWriteFrame(dest_writer, org_frame); } /* release resource */ cvReleaseVideoWriter(&dest_writer); cvReleaseImage(&dest_frame); cvReleaseCapture(&org_capture); return 0; }
//cvLogPolar(org_frame, dest_frame, org_center, 40,
// CV_INTER_LINEAR + CV_WARP_FILL_OUTLIERS);
//cvWriteFrame(dest_writer, dest_frame);
这里注释掉的几行是实际的变换代码,由于变换出来的视频不好看,于是直接使用cvWriteFrame来展示效果。这种变换的应用可以有很多,比如视频的边缘检测,人脸识别等。这里的代码实际上做了一个转码,可以当做一个转码器。
本来想使用H.264的,可惜linux上面默认没有装,所以使用了MJPG的编码。
这个代码是指定编码器的,可以指定很多种,欲知详情,grep一下代码吧。
CV_FOURCC('M', 'J', 'P', 'G'),
cvLogPolar是做一个坐标变换,出来的效果是比较扭曲的图像,看起来挺难看的,这里就不用了。
作为转码器,输入的AVI文件有44.4MB,输出的MJPG达到了149.8MB。但是输出之后linux就可以播放啦!
如图:
相关文章推荐
- Opencv step by step - 视频变换
- Opencv step by step - 加载视频
- Opencv step by step - 视频进度条
- Opencv step by step - 加载视频
- Opencv step by step - 视频进度条
- Step by step D3D_1.3_计算机图形学数学基础和图形变换
- Opencv step by step - 图像变换
- Opencv step by step - 图像载入
- OpenCV学习——Laplace变换(视频边界检测)
- Opencv step by step - 图像变换
- Opencv step by step - 图像载入
- 微软VB.NET Step By Step系列课程视频
- C#step by step 视频教程(3)变量
- Opencv step by step - ROI
- 【OpenCV学习】Laplace变换(视频边界检测)
- C#step by step 视频教程(4)常量
- Opencv step by step - ROI
- Opencv step by step - 鼠标事件
- Opencv step by step - 阈值化
- Opencv step by step - 图像融合