10

使用Python时,

openCV 函数

cv.HaarDetectObjects()

返回找到的对象以及检测分数。

如果我改用 opencv2 函数,

cv2.CascadeClassifier.detectMultiScale()

我得到检测到的物体,但没有得分。这使得难以获得良好的检测“置信度”度量。

有没有办法以某种方式使用CV2?

4

3 回答 3

1

根据文档

cv2.CascadeClassifier.detectMultiScale(image, rejectLevels, levelWeights[, scaleFactor[, minNeighbors[, flags[, minSize[, maxSize[, outputRejectLevels]]]]]]) → objects

该列表rejectLevels是表示检测结果置信度的分数。

相应的(但未记录的)C++ API是:

CV_WRAP virtual void detectMultiScale( const Mat& image,
                               CV_OUT vector<Rect>& objects,
                               vector<int>& rejectLevels,
                               vector<double>& levelWeights,
                               double scaleFactor=1.1,
                               int minNeighbors=3, int flags=0,
                               Size minSize=Size(),
                               Size maxSize=Size(),
                               bool outputRejectLevels=false );
于 2012-12-27T06:19:57.717 回答
0

您可以通过以下代码在 %100 到 %99 之间找到权重百分比:

cascade_01 = cv2.CascadeClassifier(<type here path of .xml file>)
found_object = cascade_01.detectMultiScale(image_gray, scaleFactor=1.05, minNeighbors=15, minSize=(20, 20))
    score_rejlevels= cascade_01.detectMultiScale3(image_gray, outputRejectLevels=True)
    if len(found_object) != 0:
        if len(score_rejlevels[2]) <2:
            if len(score_rejlevels[2])!=0:
                score=100-1/float(score_rejlevels[2])
                print(score)

于 2022-01-26T12:02:29.813 回答
0

我知道这是一个非常古老的问题,但是有一个未回答的评论:可以使用detectMultiScale3接受outputRejectLevels布尔参数并返回置信度分数的方法。

weights='data/haarcascades/haarcascade_frontalface_alt.xml'
face_cascade = cv2.CascadeClassifier()
face_cascade.load(cv2.samples.findFile(weights))
face_cascade.detectMultiScale3(image, outputRejectLevels=True)
于 2021-08-10T14:19:53.117 回答