iOS で OpenCV を使用して、UIImage
.
メソッドprocessImage
が大量のメモリを消費しています。Instruments での割り当てを使用してアプリをプロファイリングするとき。のLive Bytes
ピークは65MB
約70MB
1 秒間です。これにより、アプリケーションがクラッシュします。
以前は高かった。つまり~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;
}
編集注:私はからcvMatFromUIImageを使用していますdocs.opencv.org
編集の更新: @sansuiso の回答はLive Bytes
byを減らしたので受け入れました~3MB
。しかし、私はまださらなる削減を探しています。どんな提案でも大歓迎です。ありがとう。