概述
例六:保存图片
新加入的函数:
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);
用来创建一个视频写入器结构来保存视频,参数分别为输出的文件名,编码方式,帧率。视频流帧的大小。OpenCV用CV_FOURCC来指定编码格式。而fps和size和读入的文件保持一致,所以分别用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 变换的中心,输出图像在这里最精确。M 是指幅度的尺度参数。使用此函数模拟真实的人眼效果。
#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;
}
最后
以上就是眼睛大小蚂蚁为你收集整理的OpenCV学习笔记04--图片和视频的保存的全部内容,希望文章能够帮你解决OpenCV学习笔记04--图片和视频的保存所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复