3

現在、画像から特徴点を抽出するためにSIFTを実装していますが、記述子を取得するとメモリリークが発生することに気付きました。とにかく、クラスに接続されている可能性のあるメモリを解放できますか?

編集 コードブロックに詳細を追加しました

cv::SiftFeatureDetector* features = new cv::SiftFeatureDetector();
cv::SiftDescriptorExtractor* extractor = new cv::SiftDescriptorExtractor();

std::vector<cv::KeyPoint> KeyPoints;
cv::Mat Descriptors;

// Turn the image into a Mat
cv::Mat mImage = cv::Mat(iplImage);

printf("Searching for keypoints in: %s.\n", szName.c_str());

// Detect keypoints
features->detect(mImage, KeyPoints);

printf("Found %d keypoints.\n", KeyPoints.size());

// Extract descriptors
extractor->compute(mImage, KeyPoints, Descriptors);

printf("Found %d descriptors.\n\n", Descriptors.rows);

// Let my memory go!
delete extractor;
delete features;

アドバイスをいただければ幸いです。ありがとう。

4

2 に答える 2

1

あなたは正しいです。Linux で OpenCV 2.3 をテストしたところ、実際にメモリ リークが発生しました。 compute()これは SiftDescriptorExtractor に影響し、おそらくSurfDescriptorExtractorOrbDescriptorExtractorBriefDescriptorExtractorなどの他のタイプにも影響します。

ところで、このコードの最後でcvReleaseImage()呼び出すイメージを忘れないでください。iplImage

于 2011-08-02T20:07:28.507 に答える
0

2.3でも動作し、SiftDescriptorExtractorでメモリリークが発生します。ただし、他の記述子エクストラクタにはこの問題はありません。開発者に通知するために、バグトラッカーでチケットを作成することをお勧めします。

于 2011-08-06T09:16:59.520 に答える