Río*_*ire 8 optimization opencv image-processing objective-c ios
我在iOS上使用OpenCV对a进行一些图像处理UIImage.
该方法processImage消耗了太多内存.当我用仪器中的分配来分析应用程序时.将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;
}
Run Code Online (Sandbox Code Playgroud)
编辑注:我使用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);
Run Code Online (Sandbox Code Playgroud)
您可能还想检查该cvMatFromUIImage方法的内容,以确保内部的所有内容都正确释放。
| 归档时间: |
|
| 查看次数: |
2003 次 |
| 最近记录: |