xcode ios opencv leak leak. La aplicación se está estrellando

Actualmente estoy trabajando en iOS con openvc, estoy tratando de convertir un cv :: Mat a un UIImage. ¡Pero la aplicación se bloquea después de unos segundos! (Terminado debido a un error de memory)

Este es mi código que estoy usando actualmente:

using namespace cv; #import "ViewController.h" @interface ViewController () @end @implementation ViewController { CvVideoCamera* videoCamera; CADisplayLink*run_loop; UIImage*image2; } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. videoCamera = [[CvVideoCamera alloc] initWithParentView:_liveview]; videoCamera.defaultAVCaptureDevicePosition = AVCaptureDevicePositionBack; videoCamera.defaultAVCaptureSessionPreset = AVCaptureSessionPresetiFrame1280x720; videoCamera.defaultAVCaptureVideoOrientation = AVCaptureVideoOrientationLandscapeLeft; videoCamera.defaultFPS = 30; videoCamera.delegate = self; [videoCamera start]; run_loop = [CADisplayLink displayLinkWithTarget:self selector:@selector(update)]; [run_loop setFrameInterval:2]; [run_loop addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (void)update{ _smallliveview.image = image2; } - (UIImage *)UIImageFromMat:(cv::Mat)image { cvtColor(image, image, CV_BGR2RGB); NSData *data = [NSData dataWithBytes:image.data length:image.elemSize()*image.total()]; CGColorSpaceRef colorSpace; if (image.elemSize() == 1) { colorSpace = CGColorSpaceCreateDeviceGray(); } else { colorSpace = CGColorSpaceCreateDeviceRGB(); } CGDataProviderRef provider = CGDataProviderCreateWithCFData((CFDataRef)data);//CGDataProviderCreateWithCFData((__bridge CFDataRef)data); // Creating CGImage from cv::Mat CGImageRef imageRef = CGImageCreate(image.cols, //width image.rows, //height 8, //bits per component 8 * image.elemSize(), //bits per pixel image.step.p[0], //bytesPerRow colorSpace, //colorspace kCGImageAlphaNone|kCGBitmapByteOrderDefault,// bitmap info provider, //CGDataProviderRef NULL, //decode false, //should interpolate kCGRenderingIntentDefault //intent ); // Getting UIImage from CGImage UIImage *finalImage = [UIImage imageWithCGImage:imageRef]; //[self.imgView setImage:finalImage]; CGImageRelease(imageRef); CGDataProviderRelease(provider); CGColorSpaceRelease(colorSpace); return finalImage; } #pragma mark - Protocol CvVideoCameraDelegate #ifdef __cplusplus - (void)processImage:(Mat&)image; { image2 = [self UIImageFromMat:image]; } #endif @end 

¿Que debería hacer? Sería muy bueno si alguien me puede ayudar !? (;

Saludos david

Desecha cada bit de lo que escribiste para crear un UIImage y usa la function MatToUIImage () en su lugar. Simplemente pase la alfombra a la function y tendrá su image.

Aunque no preguntó, no debería usar un ciclo de ejecución o un enlace de visualización aquí. Tiempo e inicia methods relacionados al método processImage llamado por OpenCV.

Además, asegúrate de estar usando la última versión. Esto no tiene nada que ver con su problema, pero es una buena práctica.

Para importar OpenCV 3 en su proyecto Xcode 8:

  1. Instale 'OpenCV2' con Cocoapods (dice '2', pero sigue siendo la versión 3). No instales la compilation 'devel'.

  2. Abra su proyecto en el espacio de trabajo Cocoapods creado para usted, no el file del proyecto que creó, y anexe todos los files de implementación que usan OpenCV con .mm (frente a .m). Obtendrá posts de error extraños si no lo hace.