opencv(7)

来源:互联网 发布:波什程序员 编辑:程序博客网 时间:2024/06/05 00:44
#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);
}
0 0
原创粉丝点击