2

我是opencv的新手。我正在将它集成到我的 ios 项目中。在我的项目中,我正在从 UIImage 转换为 IplImage,反之亦然。我还在使用 openCV 库应用不同的图像过滤器。

我正在测试我的应用程序是否泄漏。我正在使用内存监视器运行,我注意到每次运行我的 opencv 函数集时,我的应用程序都会增长大约 1 兆字节。每次我分配一个新的 iplimage 时,我都会稍后通过调用来释放它:

cvReleaseImage(&iplimage);

我正在使用模拟器来强制低内存警告,从而释放图像内存。它似乎不会影响我的应用程序的内存大小。

cvReleaseImage 什么时候真正释放内存?我漏水了吗?

我正在使用 ios 5.1 并打开了 ARC。

编辑:

这是我用来将 UIImage 转换为 iplImage 的代码(我找到了一些复制粘贴)

- (UIImage *)UIImageFromIplImage:(IplImage *)image {
    NSLog(@"IplImage (%d, %d) %d bits by %d channels, %d bytes/row %s", image->width, image->height, image->depth, image->nChannels, image->widthStep, image->channelSeq);

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    NSData *data = [NSData dataWithBytes:image->imageData length:image->imageSize];
    CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data);
    CGImageRef imageRef = CGImageCreate(image->width, image->height,
                                        image->depth, image->depth * image->nChannels, image->widthStep,
                                        colorSpace, kCGBitmapByteOrderDefault | kCGImageAlphaLast ,
                                        provider, NULL, false, kCGRenderingIntentDefault);
    UIImage *ret = [UIImage imageWithCGImage:imageRef];
    CGImageRelease(imageRef);
    CGDataProviderRelease(provider);
    CGColorSpaceRelease(colorSpace);
    return ret;
}
4

1 回答 1

1

cvReleaseImage 绝对是在调用它的那一刻释放内存。它为图像的两个部分调用 dellocator:

  • 数据
  • 图片标题

如果您的应用报告内存泄漏,您应该检查整个代码 - 也许您创建 2 个图像,然后发布一个,或者其他什么。

于 2012-07-17T05:48:08.937 回答