OpenCV 3 HOG检测置信度

OpenCV 3 HOG Detection confidence?

本文关键字:检测 HOG OpenCV      更新时间:2023-10-16

我正在使用OpenCV 3 HOG人员检测器来检测在我的笔记本电脑网络摄像头前移动的人员。检测部分工作有点好,但我想从HOG分类器获得信心,我认为这应该是可能的。

我使用以下代码来获取检测到的对象的边界框:

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

根据智能感知提示,应该可以使用以下命令提取置信度:

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

但我不知道如何声明和初始化*信心变量,你能帮我吗?

你可以看一下官方的OpenCV文档,它声明了这个detectMultiScale函数的过载(CPU实现):

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

and for GPU

virtual void cv::cuda::HOG::detectMultiScale    (   InputArray  img,
std::vector< Rect > &   found_locations,
std::vector< double > *     confidences = NULL 
)   
所以你可以简单地调用它(CPU mode):
std::vector< cv::Rect> found_locations_rect;
std::vector<double> found_weights;
d_hog->detectMultiScale(mat, found_locations_rect, found_weights);

或(GPU实现):

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

如果它不工作,OpenCV将抛出一个异常。您可以像这样显示它:

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;
}

之后你就可以解决这个问题了