2016-09-12 11 views
1

OpenCVライブラリが提供する人検出器を実行しようとしています。これまでのところ、私のiPhone 6でうまくいったパフォーマンスが得られましたが、検出は非常に悪く、決して正確ではありません。なぜなら、このデフォルトのHOG記述子を使用してより良い検出を行うサンプル動画を見つけることができるからです。ここでiOS上のOpenCVオブジェクト検出(HOGDescriptor)

コードされています

- (void)processImage:(Mat&)image { 
    cv::Mat cvImg, result; 
    cvtColor(image, cvImg, COLOR_BGR2HSV); 

    cv::vector<cv::Rect> found, found_filtered; 

    hog.detectMultiScale(cvImg, found, 0, cv::Size(4,4), cv::Size(8,8), 1.5, 0); 

    size_t i; 
    for (i=0; i < found.size(); i++) { 
     cv::Rect r = found[i]; 
     rectangle(image, r.tl(), r.br(), Scalar(0,255,0), 2); 
    } 
} 

ビデオ入力は、iPhoneのカメラ自体から来て、「processImageは:」フレームごとに呼ばれます。 HOGDescriptorではデフォルトの人検出器を使用します:

_hog.setSVMDetector(cv::HOGDescriptor::getDefaultPeopleDetector()); 

私は何か助けていただきありがとうございます。 :)

+0

'cvtColor(image、cvImg、COLOR_BGR2HSV);'行を削除して、やり直してください。 – sturkmen

+0

自然に 'hog.detectMultiScale(image ...' – sturkmen

+0

これを試しましたが、このエラーが発生しました: '' 'OpenCVエラー:アサーションが失敗しました(img.type()== CV_8U || img.type()== CV_8UC3)のcomputeGradient''' – Jayman

答えて

2

私はopenCVを初めて使ったので、これを塩の穀物で取る: 行cvtColor(image、cvImg、COLOR_BGR2HSV);画像をBGR色空間からHSV色空間に変換する。基本的に、各ピクセルは青、緑、赤のどれくらいの量で表現されるのか、コンポーネントの色相(色)、彩度(色の濃さ)、および値(明るさ)によって表されるように変更されます。明らかに、hogDescriptorはHSV画像ではなく、BGR画像上で動作します。 CV_8UC3タイプの画像を渡す必要があります。ピクセルあたり3チャンネルの画像(C3)、例: BGR、および各チャンネル(8U)の8ビット符号なしの数字です。この部分はあまり重要ではありません。あなたはprocessImage()メソッドに何を渡していますか?それはそれらのタイプの1つでなければなりません。そうでない場合は、型を知り、cvtColor()メソッドを使ってCV_8UC3に変換する必要があります。

関連する問題