2012-06-05 67 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。