【问题标题】:How to get a score for cv2.CascadeClassifier.detectMultiScale()?如何获得 cv2.CascadeClassifier.detectMultiScale() 的分数?
【发布时间】:2012-11-29 07:58:33
【问题描述】:

使用 Python 时,

openCV 函数

cv.HaarDetectObjects()

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

如果我改用 opencv2 函数,

cv2.CascadeClassifier.detectMultiScale()

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

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

【问题讨论】:

  • 你知道怎么做吗?谢谢!

标签: python opencv computer-vision


【解决方案1】:

根据documentation

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

【讨论】:

  • 你知道关卡权重是干什么用的吗?
  • 你有使用 detectMultiScale 和 rejectLevels 和 levelWeights 的例子吗?
【解决方案2】:

我知道这是一个非常古老的问题,但有一个未回答的评论:可以使用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)

【讨论】:

    【解决方案3】:

    您可以通过以下代码在 %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)
    
    

    【讨论】:

      猜你喜欢
      • 2021-06-27
      • 1970-01-01
      • 1970-01-01
      • 2012-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-17
      • 2012-02-11
      相关资源
      最近更新 更多