私は、ポイント検出にはFASTを使用し、ディスクリプタを構築するにはSIFTを使用してディスクリプタを作成しようとしています。その目的のためにOpenCVを使用します。私はOpenCVのFASTを使用していますが、私はSIFTコードの一部を使用しています。なぜなら、私はDescriptorしか必要としないからです。今私は本当に厄介なmallocエラーがあり、私はそれを解決する方法を知らない。私はコードがGitHubに投稿されました。なぜなら、それは大きく、エラーがどこから来るのか本当に分かりません。私はちょうどそれは、DO-WHILEループの終わりに作成されていることを、知っている:Mallocエラー:push_back VectorのOpenCV/C++
features2d.push_back(features);
features.clear();
candidates2d.push_back(candidates);
candidates.clear();
}
}while(candidates.size() > 100);
あなたはGitHubでのコードの中で見ることができるように、私はすでにアプリケーションのメモリを解放しようとしました。 Xcode Analysisによると、私のアプリケーションは9Mbのメモリを使用しています。私はエラーをデバッグしようとしましたが、それは非常に複雑で、エラーがどこから来たのか分かりませんでした。
このエラーは、私のコードで57を、私はライン56でimg.at<sift_wt>(...)
typdef float sift_wt
でcalcOrientationHist(...)に渡された画像画素値にアクセスしようとするために発生し、できれば私は疑問に思い EDIT正常にパッチ理由私はCV_8UC1
を意味するタイプ0
を渡しますが、よく、私はsift.cpp at Line 330 and 331からこの部分をコピーしました。通常、SIFT記述子にはグレースケールイメージも必要ですか?
EDIT2 タイプを変更した後で、img.at<sift_wt>(...)
ポジションは変更されません。だから私はソリューションを探検し、XCodeからGuardMalloc機能に着いた。それを有効にすると、新しいエラーが表示されました。これは、おそらくMallocエラーが発生する理由です。ライン77 of my Code。それは、この行で私を与えるエラーEXC_BAD_ACCESS (Code=1, address=....)
次の行がありますされています
for(k = 0; k < len; k ++){
int bin = cvRound((n/360.f)+Ori[k]);
if(bin >= n)
bin -=n;
if(bin < 0)
bin +=n;
temphist[bin] += W[k]*Mag[k];
}
言及した変数の値は、以下の通りである: bin = 52, len = 169, n = 36, k = 0,
W, Mag, Ori and temphist
は表示されません。
ここGuadMalloc出力(申し訳ありませんが、私は本当にそれが望んで正確に理解いけない)
GuardMalloc[Test-1935]: Allocations will be placed on 16 byte boundaries.
GuardMalloc[Test-1935]: - Some buffer overruns may not be noticed.
GuardMalloc[Test-1935]: - Applications using vector instructions (e.g., SSE) should work.
GuardMalloc[Test-1935]: version 108
Test(1935,0x102524000) malloc: protecting edges
Test(1935,0x102524000) malloc: enabling scribbling to detect mods to free blocks