#include "stdafx.h"
#include"cv.h"
#include"highgui.h"
#include"stdio.h"
#include <iostream>
using namespace std;
// 实现将拍下来的图片缩放一倍
IplImage* DoPyrDown(IplImage* image, int filter = IPL_GAUSSIAN_5x5)
{
//assert(image->width%2==0 && image->height%2==0);
// 设置大小缩小一倍
CvSize size = cvSize(image->width / 2,image->height / 2);
//初始化图片
IplImage* outImage = cvCreateImage(size,image->depth,image->nChannels);
//IplImage* outImage1 = cvCreateImage(size,image->depth,image->nChannels);
//实现缩放
cvPyrDown(image,outImage);
CvScalar s;
int sum=0;
for (int i=0;i<outImage->height;i++)
{
for (int j=0;j<outImage->width;j++)
{
s = cvGet2D(outImage,i,j);
//cout<<s.val[0]<<" "<<s.val[1]<<" "<<s.val[2]<<endl;
sum = (s.val[0]+s.val[1]+s.val[2])/3;
if (sum > 128)
{
s.val[0]=s.val[1]=s.val[2]=255;
cvSet2D(outImage,i,j,s);
}
else
{
s.val[0]=s.val[1]=s.val[2]=0;
cvSet2D(outImage,i,j,s); }
}
}
//cvCvtColor(outImage,outImage1,CV_RGB2RGBA);
return outImage;
}
int main(int argc, char** argv)
{
cvNamedWindow("vedio");
CvCapture* capture;
// 首先是要通过摄像设备来得到一个CvCapture对象
if(1 == argc)
{
capture = cvCreateCameraCapture(0);
}
else
{
capture = cvCreateCameraCapture(atoi(argv[1]));
}
assert(NULL != capture);
IplImage* frame;
IplImage* img;
char keyCode;
// 每隔30ms捕捉一次视频图像
// 可以设为while(1) 使得实时捕捉视频画面
while((keyCode = cvWaitKey(100)))
{
//表示按下了ESC键,退出
if(keyCode == 27)
{
break;
}
// 得到摄像设备的下一帧图像
frame = cvQueryFrame(capture);
if(!frame)
{
break;
}
IplImage* outImage1 = cvCreateImage(cvGetSize(frame),frame->depth,frame->nChannels);
// // // 将原图拷贝过来
cvCopy(frame,outImage1,NULL);
cvShowImage("vedio",frame);
img = DoPyrDown(outImage1);
img = DoPyrDown(img); //再次缩小
img = DoPyrDown(img);
char* filename ="C:\\Documents and Settings\\abc\\My Documents\\light test\\Assets\\Standard Assets\\Light Cookies\\test.jpg";
cvSaveImage(filename,img);
cvReleaseImage(&img);
cvReleaseImage(&outImage1);
} cvReleaseImage(&frame);
cvDestroyAllWindows();
return 0;
}
怎么内存还是一点点的增加啊,我还有哪里没有释放啊,求大家帮我看看!!谢谢了
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货