2012-06-05 70 views
0

我试图将UIImage转换为cv :: Mat,然后返回到UIImage并将该UIImage插入到UIImageView中。将cv :: Mat转换为UIImage时发生崩溃opencv 2.4

这是我使用的转换代码:

UIImage * imageFromMat(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,         
            cvMat.rows,         
            8,           
            8 * cvMat.elemSize(),       
            cvMat.step[0],         
            colorSpace,         
            kCGImageAlphaNone | kCGBitmapByteOrderDefault, 
            provider,           
            NULL,           
            false,           
            kCGRenderingIntentDefault);     

UIImage *image = [[[UIImage alloc] initWithCGImage:imageRef] autorelease]; 
CGImageRelease(imageRef); 
CGDataProviderRelease(provider); 
CGColorSpaceRelease(colorSpace); 

return image; 

} 

它把罚款,但只要我将其插入一个UIImageView,我得到一个崩溃,所以我假设的问题在于有。

我注意到,如果我保留原始图像(转换为cv :: Mat之前的图像),崩溃不会发生,但我得到一个泄漏。

对这个问题可能有什么想法?

回答

0

原来我是在释放CGImageRef。