opencv(7)

#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);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章