2016-10-13 2 views
2

J'utilise le détecteur de personnes OpenCV 3 HOG pour détecter les personnes qui se déplacent devant la webcam de mon ordinateur portable. La partie détection fonctionne très bien mais j'aimerais obtenir la confiance du classificateur HOG, ce qui devrait être possible selon moi.OpenCV 3 HOG Détection de confiance?

J'utilise le code suivant pour obtenir les boîtes englobantes pour les objets détectés:

std::vector< cv::Rect> found_locations_rect; 
d_hog->detectMultiScale(rGpuImg, found_locations_rect); 

Selon la pointe IntelliSense, il devrait être possible d'extraire la confiance en utilisant:

void detectMultiScale(cv::InputArray img, std::vector<cv::Rect> &found_locations, std::vector<double> *confidence = (std::vector<double> *)0); 

Mais je Je ne sais pas comment déclarer et initialiser la variable de confiance *, pouvez-vous s'il vous plaît m'aider?

Répondre

1

Vous pouvez jeter un oeil à official OpenCV documentation, il déclare cette surcharge de la fonction detectMultiScale (CPU mise en œuvre):

virtual void cv::HOGDescriptor::detectMultiScale ( InputArray img, 
std::vector<Rect> & foundLocations, 
std::vector<double> &  foundWeights, 
double hitThreshold = 0, 
Size winStride = Size(), 
Size padding = Size(), 
double scale = 1.05, 
double finalThreshold = 2.0, 
bool useMeanshiftGrouping = false 
)  const 

et for GPU

virtual void cv::cuda::HOG::detectMultiScale ( InputArray img, 
std::vector<Rect> & found_locations, 
std::vector<double> *  confidences = NULL 
) 

Ainsi, vous pouvez simplement l'appeler (Mode CPU):

std::vector< cv::Rect> found_locations_rect; 
std::vector<double> found_weights; 
d_hog->detectMultiScale(mat, found_locations_rect, found_weights); 

ou (GPU mise en œuvre):

std::vector< cv::Rect> found_locations_rect; 
std::vector<double> confidences; 
d_hog->detectMultiScale(rGpuImg, found_locations_rect, &confidences); 

Et si cela ne fonctionnera pas, OpenCV lancera une exception. Vous pouvez l'afficher comme ceci:

try 
{ 
    std::vector< cv::Rect> found_locations_rect; 
    std::vector<double> confidences; 
    d_hog->detectMultiScale(rGpuImg, found_locations_rect, &confidences); 
} 
catch(const std::exception& e) 
{ 
    std::cout << e.what() << std::endl; 
} 

Après cela, vous pouvez résoudre le problème

+0

Merci mais je reçois l'exception suivante jeté: –

+0

Exception jetée à 0x00007FFA8C537788 dans HOG_GPU.exe: Microsoft C++ exception: cv: : Exception à l'emplacement de mémoire 0x0000005431F0E690. Exception non gérée à 0x00007FFA8C537788 dans HOG_GPU.exe: Exception Microsoft C++: cv :: Exception à l'emplacement de mémoire 0x0000005431F0E690. –

+0

@ErikS, si vous avez une exception - nous montre son texte – Evgeniy