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

例六:保存图片

新加入的函数:

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值