c++ - opencv detectMultiScale3 中的 levelWeights 是什么意思?

标签 c++ python-3.x opencv object-detection haar-classifier

这是我对 HaarCascade 的实现,我在其中训练了自己的分类器。

import cv2
import numpy as np

body_classifier = cv2.CascadeClassifier('C:\\Users\\Nemi\\MasteringComputerVision_V1.00\\Haarcascades\\trainedHuman.xml')
image = cv2.imread("twn2.jpg")
#####HEREEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
bodies,rejectLevels, levelWeights = body_classifier.detectMultiScale3(
    image,
    scaleFactor=1.1,
    minNeighbors=20,
    minSize=(24, 24),
    maxSize=(96,96),
    flags = cv2.CASCADE_SCALE_IMAGE,
    outputRejectLevels = True
    )
print(rejectLevels)
print(levelWeights)
i = 0
font = cv2.FONT_ITALIC
for (x,y,w,h) in bodies:
    cv2.rectangle(image,(x,y),(x+w,y+h),(255,0,255),2)
    font = cv2.FONT_HERSHEY_SIMPLEX
    #cv2.putText(image,str(i)+str(":")+str(np.log(levelWeights[i][0])),(x,y), font,0.5,(255,255,255),2,cv2.LINE_AA)
    cv2.putText(image,str(levelWeights[i][0]),(x,y), font,0.5,(255,255,255),2,cv2.LINE_AA)
    i = i+1

cv2.imshow("Detection",image)
cv2.waitKey(0)
cv2.destroyAllWindows()

结果输出如下: enter image description here

我想知道这个levelWeights是什么意思,为什么这个值这么小?如果这个 levelWeights 可以以检测窗口置信度的形式使用,我应该怎么做?

最佳答案

levelWights 返回某个阶段的置信度。在您的情况下,i 是检测到的对象,0 表示第一阶段。它非常小,可能是因为对象距离太远,并且分类器最初被训练为捕获更大尺寸的对象。

关于c++ - opencv detectMultiScale3 中的 levelWeights 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48974978/

相关文章:

c++ - AVX __m256i 有符号 32 位元素的整数除法

python - 类型错误 : Inheritance a class from URL is forbidden

python-3.x - 使用wrapt包更改类型

image - 如何在 OpenCV 中计算一个点的 3D 坐标

c++ - 为 vector 的 vector 分配内存

c++ - 在 C++ 中获取使用 HTML 表单发送的 POST 参数

c++ - 在字符串对象上读取/写入整数值

python - 选择与键对应的字典值

matlab - 将级联分类器从 Matlab 导入到 OpenCV 3.0

Python OpenCV-contrib v3.4.3 VideoCapture.read() 返回 false