opencv视频显示很卡,很慢,内存泄露

我这线程函数是显示视频,其中每一帧我调用我的videorunhs(IplImage*img,IplImage*mo)来处理,可能是内存释放不到位,引起播放是很慢,而且内存... 我这线程函数是显示视频,其中每一帧我调用我的videorunhs(IplImage* img,IplImage *mo)来处理,可能是内存释放不到位,引起播放是很慢,而且内存在慢慢的增长,,,请各位看看看是哪出错了
UINT CtestDlg:: videorun(LPVOID IpParamater)
{
CtestDlg *pDlg = (CtestDlg*)IpParamater;
CString filename = ((PARAMATER*)IpParamater)->path;

CvCapture *capture = NULL;
capture=cvCaptureFromAVI(filename);

int framesum = (int) cvGetCaptureProperty( capture, CV_CAP_PROP_FRAME_COUNT );
int numfrm = 0;

IplImage* frame =NULL;
IplImage * newframe= NULL;

IplImage *mo = NULL;
while(numfrm < framesum)
{
numfrm ++;
frame = cvQueryFrame(capture);
mo = cvLoadImage("..\\resource\\mo.bmp",1);

newframe = cvCloneImage (frame);

pDlg->videorunhs(newframe,mo); //此处调用函数

if(cvWaitKey(1)==27||stop==0)
return 0;
Sleep(40);

}

cvReleaseCapture(&capture);

return 0;
}
void CtestDlg::videorunhs(IplImage* img,IplImage *mo)
{
if(img)
{
........
...........
............////由于太长省略处理具体过程,主要就是把img处理后全部放在mo中,这期间没有任何cvcreate和cvRelease操作

cvReleaseImage(&img);
cvReleaseImage(&mo);
}

else
{

}
}
不知是哪里出错还请,各位多多指教.....
展开
 我来答
313319402
2012-06-25 · TA获得超过266个赞
知道小有建树答主
回答量:178
采纳率:0%
帮助的人:120万
展开全部
由于我没法调试你的程序,只能凭着分析,也不一定对,仅供参考:
你的视频卡的原因我猜测
1:Sleep(40);这里是程序挂起40ms,一秒钟为25帧,如果图像卡,可以试试把这个40变小。不过太小了可能会程序执行出错,因为可能出现空指针。
2:然后就是你图像处理的过程可能耗费时间挺多,这个问题你得试着优化程序。
还有就是你的内存溢出,个人觉得 newframe = cvCloneImage (frame);的原因,cvCloneImage这个函数是会申请内存的。建议release一下试试
阿芋王
2012-06-25 · TA获得超过161个赞
知道小有建树答主
回答量:153
采纳率:0%
帮助的人:125万
展开全部
你newframe忘了释放了吧
追问
我是在调用函数的时候释放的,而且我也试过在函数外边把newframe释放,还是不行,应该是内存泄露,内存消耗以每秒4m的速度上升....
追答
释放最好是在申请的同一层里面释放,如果你在函数里面释放,最好传进去newframe的引用或者说参数的地址,在你给出来的这几句代码里是看不出来有什么内存泄露了,也可能在你的函数里,下个boundscheck查一下就知道了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式