【求助】程序运行后,越来越卡!!

河遥 2013-04-15 01:47:21

#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)
{
// 设置大小缩小一倍
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);
char* filename ="C:\Documents and Settings\abc\My Documents\light test\Assets\Standard Assets\Light Cookies\test.jpg";
cvSaveImage("test1.jpg",outImage);
//cvReleaseImage(&outImage);
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(30)))
{
//表示按下了ESC键,退出
if(keyCode == 27)
{
break;
}

// 得到摄像设备的下一帧图像
frame = cvQueryFrame(capture);
if(!frame)
{
break;
}
IplImage* outImage = cvCreateImage(cvGetSize(frame),frame->depth,frame->nChannels);
// // // 将原图拷贝过来
cvCopy(frame,outImage,NULL);
img = DoPyrDown(outImage);
//cvReleaseImage(&img);
cvShowImage("vedio",img);

}

cvReleaseImage(&img);
cvDestroyAllWindows();
return 0;
}



为什么啊,哪里的变量没有释放,还是怎么回事~~求大神帮我优化一下啊,这是个控制摄像头的代码!
...全文
200 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
大拙男 2013-04-17
  • 打赏
  • 举报
回复
你看下任务管理器里面的内存情况就知道了
河遥 2013-04-17
  • 打赏
  • 举报
回复
引用 6 楼 jielin2012 的回复:
肯定是内存泄漏了。分配的内存没有释放。
释放了以后 看不见画面了,但是捕捉的图片还是正常的,画片是灰色的
西山小月 2013-04-16
  • 打赏
  • 举报
回复
IplImage* outImage = cvCreateImage(cvGetSize(frame),frame->depth,frame->nChannels); 放在while里面,每次都创建,但是没有释放。
jielin2012 2013-04-16
  • 打赏
  • 举报
回复
肯定是内存泄漏了。分配的内存没有释放。
  • 打赏
  • 举报
回复
确实是内存泄漏额
ltps123 2013-04-15
  • 打赏
  • 举报
回复
典型的内存泄露调试方式,这种还是要自己调试,运行的时候中断,做个内存快照,再F5运行一段时间,再中断,做个differ,一下就能看出两次内存新增的部分,很好定位问题!
河遥 2013-04-15
  • 打赏
  • 举报
回复
[quote=引用 2 楼 guolonghui 的回复:] outImage怎么一直没看到你的释放,函数里面也是一样的[/quote]
引用 1 楼 lhfslhfs 的回复:
85行的创建没有对应的销毁
额 释放以后是不卡了。。。但是视频窗口是一片灰色,捕捉的图片还是正常的,就是视频的窗口灰灰的一片。。。。
淡定的飘着 2013-04-15
  • 打赏
  • 举报
回复
outImage怎么一直没看到你的释放,函数里面也是一样的
青松2 2013-04-15
  • 打赏
  • 举报
回复
85行的创建没有对应的销毁

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧