gpt4 book ai didi

ios - 减少在 iOS 上使用 OpenCv 的方法消耗的内存

转载 作者:可可西里 更新时间:2023-11-01 03:13:28 26 4
gpt4 key购买 nike

我正在使用 OpenCV on iOSUIImage 上做一些图像处理。

processImage 方法消耗了太多内存。当我使用 Instruments 中的分配分析应用程序时。 Live Bytes 峰值在 65MB70MB 大约一秒钟。这会导致应用程序崩溃。

它过去更高,即 ~90MB,更改 int ddepth 减少了这个(从 CV_16SCV_8U ).虽然我知道减少“目标图像的所需深度”可能会减少消耗的内存,但我不明白选择最佳图像的内部工作原理格式。

ddepth 的减少似乎也增加了方法的执行时间。

我希望大大减少 Live Bytes 峰值并减少方法的执行时间。

如有任何关于如何实现这一目标的见解,我们将不胜感激。

- (void)processImage:(UIImage *)imageToProcess
{
cv::Mat imageMatrix;

double sigmaX = 1.0;

int ddepth = CV_8U; // ddepth – The desired depth of the destination image

cv::GaussianBlur( [self cvMatFromUIImage:imageToProcess], imageMatrix, cv::Size(3,3), sigmaX);

cv::Laplacian(imageMatrix, imageMatrix, ddepth, 1);

double minVal;
double maxVal;

cv::minMaxLoc(imageMatrix, &minVal, &maxVal);

std::cout << "min val : " << minVal << std::endl;
std::cout << "max val: " << maxVal << std::endl;

}

编辑说明:我正在使用 cvMatFromUIImage来自 docs.opencv.org

编辑更新:我接受了@sansuiso 的回答,因为它将Live Bytes 减少了~3MB。但是,我仍在寻求进一步减少,任何建议将不胜感激。谢谢。

最佳答案

cv::GaussianBlur 函数可以就地处理图像。您可以将 [self cvMatFromUIImage:imageToProcess] 的输出分配给您的变量 imageMatrix,这将避免创建额外的图像并降低峰值,即,继续:

cv::Mat imageMatrix = `[self cvMatFromUIImage:imageToProcess];
cv::GaussianBlur(imageMatrix, imageMatrix, cv::Size(3,3), sigmax);

您可能还想检查 cvMatFromUIImage 方法的内容,以确保所有内容都在里面正确释放。

关于ios - 减少在 iOS 上使用 OpenCv 的方法消耗的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16016199/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com