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

来源:互联网 发布:中文域名重要性 编辑:程序博客网 时间:2024/06/05 07:09
[cpp] view plain copy
  1. /* 
  2. 将一个视频转换为一个极坐标视频 
  3. */  
  4. #include "opencv/cv.h"  
  5. #include "opencv/highgui.h"  
  6.   
  7. int main(int argc,char** argv)  
  8. {  
  9.     CvCapture* capture = 0;//视频读入设备  
  10.     capture = cvCaptureFromFile(argv[1]);// 打开视频  
  11.     if(!capture){  
  12.         return -1;}  
  13.       
  14.     IplImage* bgr_frame = cvQueryFrame(capture);//抓取一帧图像  
  15.       
  16.     double fps = cvGetCaptureProperty(capture, CV_CAP_PROP_FPS);//得到帧率  
  17.     CvSize size = cvSize(//得到图片大小  
  18.             (int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_WIDTH),  
  19.             (int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_HEIGHT)           
  20.     );  
  21.       
  22.     CvVideoWriter *writer = cvCreateVideoWriter(//创建视频写入设备  
  23.         argv[2],  
  24.         CV_FOURCC('M','J','P','G'),//编码格式  
  25.         fps,  
  26.         size  
  27.         );  
  28.     IplImage* logpolar_frame = cvCreateImage(//创建文件  
  29.         size,  
  30.         IPL_DEPTH_8U,  
  31.         3  
  32.         );  
  33.     //将各帧图像转换为对数极坐标格式     
  34.     while((bgr_frame = cvQueryFrame(capture)) != NULL)  {  
  35.         cvLogPolar(bgr_frame,   
  36.                             logpolar_frame,  
  37.                             cvPoint2D32f(bgr_frame->width/2,bgr_frame->height/2),  
  38.                             40,  
  39.                             CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS  
  40.                             );  
  41.         cvWriteFrame(writer,logpolar_frame);  
  42.     }  
  43.     cvReleaseVideoWriter(&writer);  
  44.     cvReleaseImage(&logpolar_frame);  
  45.     cvReleaseCapture(&capture);  
  46.           
  47.     return 0;  
  48.   
  49. }  

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才会返回正确的数值。



转换效果:


转换前:


转换后:




[cpp] view plain copy
  1. /* 
  2. 将一个视频转换为一个极坐标视频 
  3. */  
  4. #include "opencv/cv.h"  
  5. #include "opencv/highgui.h"  
  6.   
  7. int main(int argc,char** argv)  
  8. {  
  9.     CvCapture* capture = 0;//视频读入设备  
  10.     capture = cvCaptureFromFile(argv[1]);// 打开视频  
  11.     if(!capture){  
  12.         return -1;}  
  13.       
  14.     IplImage* bgr_frame = cvQueryFrame(capture);//抓取一帧图像  
  15.       
  16.     double fps = cvGetCaptureProperty(capture, CV_CAP_PROP_FPS);//得到帧率  
  17.     CvSize size = cvSize(//得到图片大小  
  18.             (int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_WIDTH),  
  19.             (int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_HEIGHT)           
  20.     );  
  21.       
  22.     CvVideoWriter *writer = cvCreateVideoWriter(//创建视频写入设备  
  23.         argv[2],  
  24.         CV_FOURCC('M','J','P','G'),//编码格式  
  25.         fps,  
  26.         size  
  27.         );  
  28.     IplImage* logpolar_frame = cvCreateImage(//创建文件  
  29.         size,  
  30.         IPL_DEPTH_8U,  
  31.         3  
  32.         );  
  33.     //将各帧图像转换为对数极坐标格式     
  34.     while((bgr_frame = cvQueryFrame(capture)) != NULL)  {  
  35.         cvLogPolar(bgr_frame,   
  36.                             logpolar_frame,  
  37.                             cvPoint2D32f(bgr_frame->width/2,bgr_frame->height/2),  
  38.                             40,  
  39.                             CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS  
  40.                             );  
  41.         cvWriteFrame(writer,logpolar_frame);  
  42.     }  
  43.     cvReleaseVideoWriter(&writer);  
  44.     cvReleaseImage(&logpolar_frame);  
  45.     cvReleaseCapture(&capture);  
  46.           
  47.     return 0;  
  48.   
  49. }  

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才会返回正确的数值。



转换效果:


转换前:


转换后:




原创粉丝点击