opencv内存泄漏问题

qq_28696967 2018-08-05 09:22:14
写了一个opencv检测不同颜色球体的函数。用C写的。出现了内存泄漏。大神们能不能帮我看看怎么改?
void hough(IplImage*orl,  int clr)
{
clr = clr - 1;
clr = clr * 2;
int flag = 0;
CvPoint cen;
int max_pix = 0;
IplImage *andl = cvCreateImage(cvGetSize(orl), 8, 3),
*srccopyl = cvCreateImage(cvGetSize(orl), 8, 3),
IplImage *roil = cvCreateImage(cvGetSize(orl), 8, 1),
*maskl = cvCreateImage(cvGetSize(orl), 8, 1),
*smol = cvCreateImage(cvGetSize(orl), 8, 1),
*pixl = cvCreateImage(cvGetSize(orl), 8, 1),
cvCopy(orl, srccopyl, 0);
cvSetZero(maskl);
cvCvtColor(orl, smol, CV_RGB2GRAY);
CvMemStorage* storagel = cvCreateMemStorage(0);
CvSeq* resultsl = cvHoughCircles(smol, storagel, CV_HOUGH_GRADIENT, 2, 20, 100, 100, 30, 45);
for (int i = 0; i < resultsl->total; i++) {
cvSetZero(andl);
cvSetZero(roil);
cvSetZero(pixl);
float*pl = (float*)cvGetSeqElem(resultsl, i);
CvPoint ptl = cvPoint(cvRound(pl[0]), cvRound(pl[1]));
cvCircle(orl, ptl, cvRound(pl[2]), CV_RGB(0xff, 0x00, 0x00), 3, 8, 0);
cvCircle(roil, ptl, cvRound(pl[2]), CV_RGB(0xff, 0xff, 0xff), -1, 8, 0);
cvAnd(srccopyl, srccopyl, andl, roil);
cvOr(maskl, roil, maskl,0);
cvCvtColor(andl, andl, CV_BGR2HSV);
cvInRangeS(andl, color[clr], color[clr + 1], pixl);
int count_pixl = cvCountNonZero(pixl);
if (max_pix < count_pixl) {
max_pix = count_pixl;
cen = ptl;
flag = 1;
}
}
show_imgl = orl; //show_imgl是全局变量
cvReleaseImage(&andl); cvReleaseImage(&srccopyl); cvReleaseImage(&roil); cvReleaseImage(&maskl); cvReleaseImage(&smol); cvReleaseImage(&pixl);

cvReleaseMemStorage(&storagel);
// cvReleaseMemStorage(&resultsl->storage); cvReleaseMemStorage(&resultsr->storage);
}
...全文
283 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2018-08-07
  • 打赏
  • 举报
回复
换C++版的吧。类变量离开其作用域时,自动调用其析构函数。
sghcpt 2018-08-07
  • 打赏
  • 举报
回复
会不会是hough函数的第一个参数IplImage*orl指向的图片内存没有释放?又或者是opencv里面的实现的机制,缓存一些图片数据,暂时不释放导致内存泄漏?
qq_28696967 2018-08-05
  • 打赏
  • 举报
回复
我把中间的都注释掉了然后运行还是不能释放内存
void hough(IplImage*orl,  int clr)
{
clr = clr - 1;
clr = clr * 2;
int flag = 0;
CvPoint cen;
int max_pix = 0;
IplImage *andl = cvCreateImage(cvGetSize(orl), 8, 3),
*srccopyl = cvCreateImage(cvGetSize(orl), 8, 3);
IplImage *roil = cvCreateImage(cvGetSize(orl), 8, 1),
*maskl = cvCreateImage(cvGetSize(orl), 8, 1),
*smol = cvCreateImage(cvGetSize(orl), 8, 1),
*pixl = cvCreateImage(cvGetSize(orl), 8, 1);
cvReleaseImage(&andl); cvReleaseImage(&srccopyl); cvReleaseImage(&roil); cvReleaseImage(&maskl); cvReleaseImage(&smol); cvReleaseImage(&pixl);
}

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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