1

OpenCV 3.1 および VC++ 2015 でカスケード分類器を使用してオブジェクト検出に取り組んでいます。カスケードに各画像のオブジェクトを 1 つだけ検出させ、その精度スコアを取得したいと考えています。そのために、メソッド CascadeClassifier::detectMultiScale の文書化されていないプロトタイプを拒否レベルで使用しようとしました。文書化されたバージョンはうまく機能します。しかし、リジェクト レベルのバージョンは、何の結果ももたらさずに長時間実行されます。これは以下の私のソースコードです。

#include "stdafx.h"
#include <opencv2/opencv.hpp>

using namespace std;
  using namespace cv;

String plate_cascade_name = "eu.xml";
int main(int argc, char **argv) {

CascadeClassifier cascade;
const float scale_factor(1.2f);
const int min_neighbors(3);
if (cascade.load(plate_cascade_name)) {

    Mat img = imread("c:/users/anis/desktop/voituretn/voiture1.jpg", CV_LOAD_IMAGE_GRAYSCALE);
    equalizeHist(img, img);
    vector<Rect> objs;
    vector<int> reject_levels;
    vector<double> level_weights;
    cascade.detectMultiScale(img, objs, reject_levels, level_weights, scale_factor, min_neighbors, 0, Size(60, 13), img.size(), true);
//cascade.detectMultiScale(img, objs, scale_factor, min_neighbors, 0,  Size(60, 13), img.size());
    Mat img_color = imread("c:/users/anis/desktop/voituretn/voiture1.jpg", CV_LOAD_IMAGE_COLOR);
    for (int n = 0; n < objs.size(); n++) {
        rectangle(img_color, objs[n], Scalar(255, 0, 0), 8);
//      putText(img_color, std::to_string(level_weights[n]),Point(objs[n].x, objs[n].y), 1, 1, Scalar(0, 0, 255));
    }
    imshow("VJ Face Detector", img_color);
    waitKey(0);

}
return 0;
}
4

0 に答える 0