我是靠谱客的博主 眼睛大小蚂蚁,最近开发中收集的这篇文章主要介绍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;
}


最后

以上就是眼睛大小蚂蚁为你收集整理的OpenCV学习笔记04--图片和视频的保存的全部内容,希望文章能够帮你解决OpenCV学习笔记04--图片和视频的保存所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部