【问题标题】:OpenCV cv::Mat release for free MemoryOpenCV cv::Mat 释放内存
【发布时间】:2023-03-18 00:11:01
【问题描述】:

我尝试从内存中释放图像 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;
}

【问题讨论】:

    标签: c++ ios opencv image-processing


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-07
      • 2016-05-08
      • 1970-01-01
      • 2013-06-26
      • 2017-01-12
      • 2013-03-30
      • 1970-01-01
      相关资源
      最近更新 更多