我在 iOS上使用 OpenCV 在UIImage
.
该方法processImage
消耗太多内存。当我使用 Instruments 中的分配来分析应用程序时。Live Bytes
峰值大约65MB
持续一70MB
秒钟。这会导致应用程序崩溃。
它曾经更高,即~90MB
改变int ddepth
减少了这个(从CV_16S
到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;
}
编辑说明:我正在使用来自的cvMatFromUIImagedocs.opencv.org
编辑更新:我接受了@sansuiso 的回答,因为它减少了Live Bytes
by ~3MB
。但是,我仍在寻找进一步的减少,任何建议将不胜感激。谢谢。