OpenCV cv :: Mat发布免费内存

时间:2015-04-20 23:19:11

标签: c++ ios opencv image-processing

我尝试从内存中释放一个图像cv :: Mat但效果不佳。 在创建映像之前,内存为20,3 MB

cv::Mat image = [self cvMatWithImage:originalUIImage];

现在内存是54,3 MB ..在下一行,为了测试,我发布了cv :: Mat

image.release();

我看到内存是37,2 MB,为什么?

方法cvMatWithImage:

- (cv::Mat)cvMatWithImage:(UIImage *)image
{
    CGColorSpaceRef colorSpace = CGImageGetColorSpace(image.CGImage);
    CGFloat cols = image.size.width;
    CGFloat rows = image.size.height;

    cv::Mat cvMat(rows, cols, CV_8UC4); // 8 bits per component, 4 channels

    CGContextRef contextRef = CGBitmapContextCreate(cvMat.data,                 // Pointer to backing data
                                                    cols,                       // Width of bitmap
                                                    rows,                       // Height of bitmap
                                                    8,                          // Bits per component
                                                    cvMat.step[0],              // Bytes per row
                                                    colorSpace,                 // Colorspace
                                                    kCGImageAlphaNoneSkipLast |
                                                    kCGBitmapByteOrderDefault); // Bitmap info flags

    CGContextDrawImage(contextRef, CGRectMake(0, 0, cols, rows), image.CGImage);
    CGContextRelease(contextRef);

    return cvMat;
}

1 个答案:

答案 0 :(得分:0)

不确定这是否是整个问题,但您可能想要使用CV_8UC3而不是CV_8UC4,因为kCGImageAlphaNoneSkipLast只有3个通道。