您的位置:首页 > 运维架构

读取摄像头并存盘(学习openCV课后题2.3改进)

2010-07-13 16:40 501 查看
// 第二章 课后练习题
// 题号:2.3.2
// 功能:读取摄像头中的图像数据,将是图像文件的尺寸缩小一倍
// 并将经缩小处理后的视频文件数据数据做存盘处理。

#include "cv.h"
#include "highgui.h"

/*******************************************************************/
/* 函数名 : doPyrDown() 执行图形的向下图像金字塔
/* 参数 : input 输入图像
/* filter cvPyrDown()的默认参数
/* 功能 : 将输入图像input缩小一倍,并返回指向经过缩小处理图像的指针
/*******************************************************************/

IplImage *doPyrDown(IplImage *input,int filter=CV_GAUSSIAN_5x5)
{
//确保图像宽度和高度能被2整除
assert(input->width%2==0 && input->height%2==0);

IplImage *output=cvCreateImage(cvSize(input->width/2,input->height/2),
input->depth,
input->nChannels);

assert(output!=NULL);

cvPyrDown(input,output,CV_GAUSSIAN_5x5);

return(output);

}

/****************************main()函数****************************/

void main()
{
//创建一个CvCapture对象用以读取摄像头数据
CvCapture *capture=cvCreateCameraCapture(0);
assert(capture!=NULL);

//从摄像头中取出一帧图像
IplImage *image=cvQueryFrame(capture);
assert(image!=NULL);

//获得读出图像的大小
CvSize size=cvSize(image->width/2,image->height/2);

//获得图像的播放速度
double fps=cvGetCaptureProperty(capture,CV_CAP_PROP_FPS);

// 创建一个CvVideoWriter对象用于向磁盘写入视频文件
CvVideoWriter *writer=cvCreateVideoWriter("video.avi",-1,fps,size);

//指向经过doPyrDown()变换后的图像
IplImage *change_image=cvCreateImage(size,image->depth,image->nChannels);

//创建窗口用以显示图像
cvNamedWindow("Show1");
cvNamedWindow("Show2");

//当从capture获得的图像不为空时
while ((image=cvQueryFrame(capture))!=NULL)
{
//进行图像缩放
change_image=doPyrDown(image);
//进行图像变化,将翻转的图像正常显示
cvConvertImage(change_image,change_image,CV_CVTIMG_FLIP);

//将图像和处理后的图像在窗口中显示
cvShowImage("Show1",image);
cvShowImage("Show2",change_image);

//写入文件
cvWriteFrame(writer,change_image);

char c=cvWaitKey(100);

if (c==27)
{
break;
}
}
//释放资源
cvReleaseCapture(&capture);
cvReleaseVideoWriter(&writer);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: