我正在使用OpenCV on iOS对UIImage
进行图像处理。
processImage
方法消耗的内存太多了。当我使用Instruments中的分配来分析应用程序时,Live Bytes
在大约一秒钟的时间内峰值达到65MB
到70MB
,这导致应用程序崩溃。
以前更高,即 ~90MB
,将int ddepth
更改为CV_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;
}
编辑备注:我正在使用来自docs.opencv.org
的cvMatFromUIImage。
编辑更新:我接受了@sansuiso的答案,它将Live Bytes
减少了约3MB
。
然而,我仍在寻找进一步的减少,任何建议都将不胜感激。谢谢。
cvMatFromUIImage:
方法的定义? - Ben Lings