这可能是一个愚蠢的问题,但是在iOS中编程时,ARC(自动引用计数)与Open CV进行交互?iOS中的Open-CV内存管理(Objective-c与ARC)
我在问这个,因为我最近刚开始使用Open CV。在iOS上使用ARC时,不必担心对象,因为我只需确保没有指向它们的指针,以便它们可以被释放。
打开CV似乎有类似的清洁功能:
http://opencv.willowgarage.com/documentation/cpp/memory_management.html
当使用新的界面,在需要的时候最内存释放,甚至 内存分配操作是自动完成的。
首先,这是否意味着我不必释放这些对象?
其次,我在同一个.mm文件中同时使用了OpenCV和Objective C.假设物体不会互相干扰是否安全?
例如,这会给我从简历垫一个的UIImage:
+ (UIImage *)imageWithCVMat:(const cv::Mat&)cvMat
{
return [[UIImage alloc] initWithCVMat:cvMat];
}
使用这个:
- (id)initWithCVMat:(const cv::Mat&)cvMat
{
NSData *data = [NSData dataWithBytes:cvMat.data length:cvMat.elemSize() * cvMat.total()];
CGColorSpaceRef colorSpace;
if (cvMat.elemSize() == 1)
{
colorSpace = CGColorSpaceCreateDeviceGray();
}
else
{
colorSpace = CGColorSpaceCreateDeviceRGB();
}
CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data);
CGImageRef imageRef = CGImageCreate(cvMat.cols, // Width
cvMat.rows, // Height
8, // Bits per component
8 * cvMat.elemSize(), // Bits per pixel
cvMat.step[0], // Bytes per row
colorSpace, // Colorspace
kCGImageAlphaNone | kCGBitmapByteOrderDefault, // Bitmap info flags
provider, // CGDataProviderRef
NULL, // Decode
false, // Should interpolate
kCGRenderingIntentDefault); // Intent
self = [self initWithCGImage:imageRef];
CGImageRelease(imageRef);
CGDataProviderRelease(provider);
CGColorSpaceRelease(colorSpace);
return self;
}
*方法罗宾夏丘采取
预先感谢任何咨询。
非常感谢你,我刚刚很困惑,因为我对opencv完全陌生,顺便说一句,你的网页有很好的工作方式,我很久以前就从它开始跳起来了。我打算使用脚本,但我认为它打破了iOS 5.1。 – Pochi 2012-03-21 09:02:25
顺便说一句,我忘了提及,我想我找出了内存崩溃的原因。看来,因为我使用卢卡斯卡纳德pyr光流法。当我做出突然的动作时,金字塔部分正在移动太多的层次,因此使用了太多的内存。 MAYBE哈哈 – Pochi 2012-03-21 09:31:42