• Opencv step by step



    这次是变换视频内容并且写入新的文件。

    代码如下:


    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就可以播放啦!

    如图:




  • 相关阅读:
    麦肯锡 问题分析与解决技巧
    JavaSe_IO流总结
    tcpdump
    interface
    phpexcel 合并单元格后的动态行高
    分布式事务锁的实现
    IntelliJ IDEA 实用快捷键
    Redis安装教程
    ng new my-app创建angular项目是卡住的解决办法
    SqlYog无法连接mysql数据库(包括docker环境)的解决方法
  • 原文地址:https://www.cnblogs.com/tanhangbo/p/4282614.html
Copyright © 2020-2023  润新知