1

私の Android アプリケーションは、javaCV を使用し、LBP カスケードで detectMultiScale() 関数を呼び出して顔を検出します。私のエミュレータでは完全に正常に動作します。しかし、HTC Incredible S でテストしようとすると、0 が返され、顔を検出できませんでした。うまくいかない理由を誰かに教えてもらえますか? 助けてくれて本当にありがとうございます!!!

顔検出のコードは次のとおりです。

    CASCADE_FILE = working_Dir.getAbsolutePath() + "/lbpcascade_frontalface.xml";

    public static CvRect getFaceWithLBP(IplImage grayFaceImg)
    {
         CascadeClassifier cascade = new CascadeClassifier(CASCADE_FILE);
         CvRect facesdetection = new CvRect(null);

         cascade.detectMultiScale(grayFaceImg, facesdetection, 1.1, 2, CV_HAAR_FIND_BIGGEST_OBJECT | CV_HAAR_DO_ROUGH_SEARCH, 
                             new CvSize(), new CvSize(grayFaceImg.width(), grayFaceImg.height()));  

         return facesdetection;
    }
4

1 に答える 1

1

OpenCV のドキュメントに従って、フラグ (CV_HAAR_FIND_BIGGEST_OBJECT | CV_HAAR_DO_ROUGH_SEARCH など) は新しいカスケード (LBP のものなど) では使用できません。

void CascadeClassifier::detectMultiScale(const Mat& image, vector& objects, double scaleFactor=1.1, int minNeighbors=3, int flags=0, Size minSize=Size(), Size maxSize=Size()) パラメーター:

  • cascade – Haar 分類子カスケード (OpenCV 1.x API のみ). Load() を使用して、XML または YAML ファイルからロードできます。カスケードが不要になったら、cvReleaseHaarClassifierCascade(&cascade) を使用して解放します。
  • image – オブジェクトが検出された画像を含むタイプ CV_8U のマトリックス。
  • objects – 各四角形に検出されたオブジェクトが含まれる四角形のベクトル。
  • scaleFactor – 各画像スケールで画像サイズをどれだけ縮小するかを指定するパラメーター。
  • minNeighbors – 各候補長方形を保持するために必要な近傍数を指定するパラメーター。
  • flags – 関数 cvHaarDetectObjects と同じ古いカスケードの意味を持つパラメーター。新しいカスケードには使用されません。
  • minSize – 可能な最小オブジェクト サイズ。それより小さいオブジェクトは無視されます。
  • maxSize – 可能な最大オブジェクト サイズ。それより大きいオブジェクトは無視されます。
于 2013-03-22T03:10:02.663 に答える