Ich verwende OpenCV unter iOS , um einige Bildverarbeitungen in% co_de durchzuführen %.
Die Methode UIImage
verbraucht zu viel Speicher. Wenn ich die App mit Zuweisungen in Instrumenten profiliere. Die processImage
Spitzen bei Live Bytes
bis 65MB
für ungefähr eine Sekunde. Dies führt zum Absturz der Anwendung.
Früher war es höher, d. h. 70MB
, änderte ~90MB
reduzierte dies (von int ddepth
auf CV_16S
). Während ich verstehe, dass die Reduzierung der 'gewünschten Tiefe des Zielbildes' die Speicherkapazität reduzieren kann, verstehe ich nicht, dass es die inneren Abläufe sind, um das Beste auszuwählen
Format.
Die Reduktion in CV_8U
scheint auch die Ausführungszeit der Methode zu erhöhen.
Ich möchte den ddepth
Peak stark reduzieren und die Ausführungszeit der Methode ebenfalls reduzieren.
Alle Einsichten, wie dies zu erreichen ist, würden wir sehr begrüßen.
%Vor% Bearbeiten Hinweis: Ich verwende cvMatFromUIImage von Live Bytes
Update bearbeiten: Ich habe die Antwort von @sansuiso akzeptiert, da sie docs.opencv.org
by Live Bytes
reduziert hat.
Ich bin jedoch immer noch auf der Suche nach weiteren Reduktionen, alle Vorschläge werden sehr geschätzt. Danke.
Die Funktion cv::GaussianBlur
kann ein Bild direkt verarbeiten.
Sie können die Ausgabe von [self cvMatFromUIImage:imageToProcess]
Ihrer Variablen imageMatrix
zuweisen, wodurch eine zusätzliche Bilderstellung vermieden und der Spitzenwert reduziert wird, d. H. Mit:
Sie können auch den Inhalt der cvMatFromUIImage
-Methode überprüfen, um sicherzustellen, dass alles korrekt innerhalb von freigegeben wird.
Es ist entweder Speicherleck im [self cvMatFromUIImage:]
oder häufig Speicherzuweisung Problem .
Um sicher zu sein, dass kein Speicherleck vorhanden ist, zeigen Sie uns cvMatFromUIImage
listing.
Speicherzuweisung
Versuchen Sie, alle temporären Bilder an die Teilnehmer zu übertragen. Dies eliminiert unnötige Speicherzuweisungen und Ihr Code wird zugewiesenen Speicher für jeden Rahmen wiederverwenden. Kein Speichermanager mag es, wenn der Benutzercode eine konstante Speicherzuweisung großer Speichermengen vornimmt und diese freigibt. Sie sollten versuchen, es zu vermeiden, da es zu Spikes im Speicherverbrauch und zu Abstürzen führt, da der Speichermanager einen freien Speicher für einige Zeit freihalten kann (nachdem Sie die Zuweisung von cv :: Mat aufgehoben haben).
Tags und Links optimization objective-c opencv ios image-processing