我是opencv的新手。我正在将它集成到我的ios项目中。在我的项目中,我正在从UIImage转换为IplImage,反之亦然。我也在使用openCV库应用不同的图像过滤器。
我正在测试我的应用程序是否泄漏。我使用内存监视器运行,我注意到每次运行opencv函数集时,我的应用程序都会增长大约1兆字节。每次我分配一个新的iplimage时,我稍后会通过调用:来发布它
cvReleaseImage(&iplimage);
我正在使用模拟器来强制低内存警告,从而释放图像内存。它似乎不会影响我的应用程序的内存大小。
cvReleaseImage什么时候能真正释放内存?我在漏水吗?
我使用的是打开ARC的ios 5.1。
编辑:
这是我正在使用的代码(我找到了一些复制粘贴),用于将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;
}
cvReleaseImage在被调用时肯定会释放内存。它为图像的两个部分调用dellocator:
- 数据
- 图像标头
如果你的应用程序报告内存泄漏,你应该检查整个代码——也许你创建了两个图像,然后发布了一个,或者其他什么。