OpenCV学习笔记04--图片和视频的保存

来源:互联网 发布:人工智能的利弊 作文 编辑:程序博客网 时间:2024/05/14 20:40

例六:保存图片

新加入的函数:

1.cvSaveImage(outImageName, outImage);

  用cvSaveImage(outImageName, outImage)即可方便的保存图片。当然为了安全,可以先将原图进行拷贝,再进行保存

2.cvCopy(frame, outImage, NULL);

  将原图拷贝到新图 

 

#include "stdafx.h"   #include"highgui.h"   #include"stdio.h"   int main(int argc, char** argv){cvNamedWindow("vedio");CvCapture* capture;capture = cvCreateCameraCapture(0);IplImage* frame;char keyCode;while ((keyCode = cvWaitKey(30)))// 每隔30ms捕捉一次视频图像 {frame = cvQueryFrame(capture);if (!frame){ break; }if (keyCode == 27){ break; } //表示按下了ESC键,退出  if (keyCode == 13)//表示按下了回车键,此时应当保存照片  {//IplImage* outImage = cvCreateImage(cvGetSize(frame), frame->depth, frame->nChannels);//cvCopy(frame, outImage, NULL); cvSaveImage("test.jpg", frame);//保存图片printf(" 恭喜你,保存图片成功!\n");}cvShowImage("vedio", frame);}cvReleaseImage(&frame);cvDestroyAllWindows();return 0;}

 

例七:保存视频文件

一:将视频文件保存为AVI格式文件

本例新加入的几个函数:

1.cvCreateVideoWriter("D:\\output.avi", CV_FOURCC('M', 'J', 'P', 'G'), fps, size);

用来创建一个视频写入器结构来保存视频,参数分别为输出的文件名,编码方式,帧率。视频流帧的大小。OpenCVCV_FOURCC来指定编码格式。而fpssize和读入的文件保持一致,所以分别用cvGetCaptureProperty(capture, CV_CAP_PROP_FPS)得到帧率即每秒钟显示的帧数,用cvSize((int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH), (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT))得到输出视频流帧的大小。

2.cvWriteFrame(writer, logpolar_frame);

  将一帧写入视频写入器结构,参数分别为视频写入器结构和待写入的图像

3.void cvLogPolar( const CvArr* src, CvArr* dst, CvPoint2D32f center, double M, int flags=CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS );

把图像映射到极指数空间 src 输入图像。 dst 输出图像。 center 变换的中心,输出图像在这里最精确是指幅度的尺度参数使用此函数模拟真实的人眼效果。

 

 

 

#include "stdafx.h"#include "highgui.h"#include "cv.h" int _tmain(int argc, _TCHAR* argv[]){CvCapture* capture = cvCreateFileCapture("D:\\1.wmv");if (!capture) {return -1;}IplImage* bgr_frame;double fps = cvGetCaptureProperty(capture, CV_CAP_PROP_FPS);  //得到帧率,每秒钟显示的帧数CvSize size = cvSize((int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH), (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT));//输出视频流帧的大小CvVideoWriter *writer = cvCreateVideoWriter("D:\\output.avi", CV_FOURCC('M', 'J', 'P', 'G'), fps, size);//创建视频写入器结构来保存视频,参数分别为输出的文件名,编码方式,帧率。视频流帧的大小// IplImage* logpolar_frame = cvCreateImage(size, IPL_DEPTH_8U, 3);while ((bgr_frame = cvQueryFrame(capture)) != NULL){  //    cvLogPolar(bgr_frame, logpolar_frame, cvPoint2D32f(bgr_frame->width / 2, bgr_frame->height / 2), 40, CV_INTER_LINEAR + CV_WARP_FILL_OUTLIERS);//cvWriteFrame(writer, logpolar_frame);cvWriteFrame(writer, bgr_frame);   //将一帧写入视频写入器结构}cvReleaseVideoWriter(&writer);//cvReleaseImage(&logpolar_frame);cvReleaseCapture(&capture);return 0;}

 

 

 

 

 

二:将摄像头采集到的信息保存为AVI格式文件

 

 

<pre name="code" class="cpp">#include "stdafx.h"#include "highgui.h"#include "cv.h"int _tmain(int argc, _TCHAR* argv[]){cvNamedWindow("test", 0);CvCapture* capture = cvCreateCameraCapture(0);if (!capture) {return -1;}IplImage* bgr_frame;CvSize size=cvSize((int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH),                     (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT));//输出视频流帧的大小CvVideoWriter *writer = cvCreateVideoWriter("D:\\output.avi", CV_FOURCC('M', 'J', 'P', 'G'), 20, size);//创建视频写入器结构来保存视频,参数分别为输出的文件名,编码方式,帧率。视频流帧的大小while ((bgr_frame = cvQueryFrame(capture)) != NULL){bgr_frame = cvQueryFrame(capture);cvShowImage("test", bgr_frame);int c = cvWaitKey(50);  if (c == 27) break;//IplImage* logpolar_frame = cvCreateImage(size, IPL_DEPTH_8U, 3);//     cvLogPolar(bgr_frame, logpolar_frame, cvPoint2D32f(bgr_frame->width / 2, bgr_frame->height / 2), 40, CV_INTER_LINEAR + CV_WARP_FILL_OUTLIERS);cvWriteFrame(writer, bgr_frame);   //将一帧写入视频写入器结构}cvReleaseVideoWriter(&writer);cvReleaseImage(&logpolar_frame);cvReleaseCapture(&capture);return 0;}



0 0