Używam OpenCV on iOS do przetwarzania niektórych obrazów na UIImage
.Zmniejszenie ilości pamięci zużywanej przez metodę używającą OpenCv na iOS
Metoda zużywa zbyt dużo pamięci. Kiedy profiluję aplikację z przydziałami w Instrumentach. Piki Live Bytes
osiągają wartości od 65MB
do 70MB
przez około sekundę. Powoduje to awarię aplikacji.
Wcześniej był wyższy tj. ~90MB
, zmieniając int ddepth
zmniejszono to (z CV_16S
do CV_8U
). Chociaż rozumiem, że zmniejszenie "pożądanej głębokości docelowego obrazu" może zmniejszyć ilość zużywanej pamięci, nie rozumiem, że to wewnętrzne działanie, które wybiera najlepszy format .
Redukcja wartości ddepth
wydaje się również wydłużać czas wykonania metody.
Chcę znacznie zmniejszyć szczyt Live Bytes
i skrócić czas wykonania metody.
Wszelkie spostrzeżenia na temat tego, jak to osiągnąć, byłyby mile widziane.
- (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;
}
Edit Uwaga: Używam cvMatFromUIImage z docs.opencv.org
Edycja Aktualizacja: Przyjąłem @sansuiso „s odpowiedź gdyż zmniejszyło Live Bytes
przez ~3MB
. Jednak nadal szukam dalszej redukcji, wszelkie sugestie będą bardzo mile widziane. Dzięki.
Czy można dołączyć definicję metody 'cvMatFromUIImage:'? –
@BenLings [tutaj] (http://docs.opencv.org/doc/tutorials/ios/image_manipulation/image_manipulation.html#opencviosimagemanipulation) pochodzi z docs.opencv.org. –