13

MITの車のデータセットからトレーニングされたHaarカスケード分類器を使用して、OpenCVで車両を検出しています(OpenCVで提供されるユーティリティを使用してトレーニングされています)。これは、デバッグ モードでコンパイルするとかなりうまく機能しますが、リリース モードでコンパイルすると、カスケードはまったく検出しません。以下のテスト イメージで次のコードを実行すると、デバッグ モードでは検出されますが、リリース モードでは何も検出されません (この動作は、データ シーケンス内のすべてのイメージで継続します)。

これが発生する理由と、さらに重要なこととして、リリース モードで実行しているときに検出を取得するためにできることを教えてください。

カスケード ファイル

コード

cv::Mat testImage = cv::imread("testImage.png",0);
cv::equalizeHist(testImage, testImage);

cv::CascadeClassifier vehicleCascade;
vehicleCascade.load("cars3.xml");

// Detect vehicles
std::vector<cv::Rect> cars;
vehicleCascade.detectMultiScale(
    testImage,                  // Input image
    cars,                   // Output bounding boxes
    1.1,                    // scale factor - how much image size is reduced at each scale
    5,                      // min neighbours - how many neighbours required to maintain rect
    0|CV_HAAR_SCALE_IMAGE,  // Not used
    cv::Size(30,30),        // Min poss object size
    cv::Size()              // Max poss object size
    );

std::cout << "Found " << cars.size() << " objects.\n";

for (int i=0; i<cars.size(); ++i)
    cv::rectangle(testImage, cars.at(i), CV_RGB(255,0,0), 3);

cv::namedWindow("Haar cascade");
cv::imshow("Haar cascade", testImage);
cv::waitKey(0);
cv::imwrite("output.png", testImage);

テストイメージ

テスト画像

4

2 に答える 2

3
  1. 奇妙ですが、私にとっては、コードは両方のモードで正常に機能しています。Windows 7 32 ビットで Visual Studio 2010 を使用しています。これが私のプロジェクトです - https://www.dropbox.com/s/5kubn5tlu7k6ziy/opencvhw.rar、実行可能ファイル(リリースおよびデバッグディレクトリ)を確認できます。Visual Studio を使用していて、自分でビルドしたい場合は、両方のモードのライブラリとインクルード ディレクトリへのパスを変更する必要があります (インクルード ディレクトリのパスは同じですが、ライブラリ ディレクトリのパスは異なります)。(プロジェクト -> ... プロパティ -> 構成プロパティ -> vc++ ディレクトリ)

  2. 一般的に、プロジェクトの構成を注意深く確認することをお勧めします。非常に奇妙な動作を引き起こす可能性のある小さな間違いを犯すのは本当に簡単です。場合によっては、すべてを最初から構成し直すことが最善の選択肢となる場合があります。

  3. OpenCVには非常に奇妙なバグがあります-それは新しいものではありません:)たとえば、デバッグ中に一部のコーデックを使用できません-プログラムをデバッグモードで実行すると、デバッグなしですべて問題ありませんが、デバッグしようとすると-ファイルから読み取られる各フレーム空です(ただし、サイズは正しいです)。少し似たようなものに遭遇した可能性があります。画像を別の形式に変換してみてください (テストには bmp が最適だと思います - 追加のライブラリがなくても常に動作するはずです)。

  4. また、jpgファイルをアップロードしたので、自分で名前を変更して変換する必要があったことに注意してください-変換中にこのファイルの何かが変更された可能性があるため、まったく同じファイルでコードをテストしていません-ドロップボックスにpngファイルをアップロードしてください。テストできます。

于 2013-01-12T04:34:26.150 に答える
2

この投稿を参照してください:このタイプのエラーは、リリースモードでopencvのデバッグライブラリにリンクすることによって発生する可能性があります。

于 2012-12-20T12:02:37.223 に答える