Tôi đang sử dụng OpenCV on iOS để thực hiện một số xử lý hình ảnh trên UIImage
.Giảm bộ nhớ được tiêu thụ theo phương pháp sử dụng OpenCv trên iOS
Phương pháp processImage
đang tiêu thụ quá nhiều bộ nhớ. Khi tôi hồ sơ ứng dụng với phân bổ trong dụng cụ. Đỉnh số Live Bytes
tại 65MB
tới 70MB
trong khoảng một giây. Điều này khiến ứng dụng gặp sự cố.
Được sử dụng để cao hơn tức là ~90MB
, thay đổi int ddepth
giảm số này (từ CV_16S
đến CV_8U
). Trong khi tôi hiểu rằng việc giảm độ sâu mong muốn của hình ảnh đích có thể làm giảm bộ nhớ được tiêu thụ, tôi không hiểu đó là hoạt động bên trong để chọn định dạng tốt nhất.
Việc giảm số ddepth
cũng có vẻ như tăng thời gian thực hiện của phương thức.
Tôi muốn giảm đáng kể mức cao nhất của Live Bytes
và giảm thời gian thực hiện của phương pháp.
Bất kỳ thông tin chi tiết nào về cách đạt được điều này sẽ được đánh giá cao.
- (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;
}
Chỉnh sửa Lưu ý: Tôi đang sử dụng cvMatFromUIImage từ docs.opencv.org
Sửa Cập nhật: Tôi chấp nhận @sansuiso 's câu trả lời vì nó làm giảm Live Bytes
bởi ~3MB
. Tuy nhiên, tôi vẫn đang tìm kiếm thêm giảm, bất kỳ đề xuất sẽ được đánh giá rất nhiều. Cảm ơn.
Bạn có thể đưa định nghĩa về phương thức 'cvMatFromUIImage:' của mình không? –
@BenLings [Ở đây] (http://docs.opencv.org/doc/tutorials/ios/image_manipulation/image_manipulation.html#opencviosimagemanipulation) nó là từ docs.opencv.org. –