Я работаю над обнаружением объектов с помощью каскадного классификатора на OpenCV 3.1 и VC ++ 2015.
Я хочу заставить каскад обнаруживать только один объект для каждого изображения, и я хочу получить его оценку точности. Для этого я попытался использовать недокументированный прототип метода 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;
}
Задача ещё не решена.
Других решений пока нет …