如何获得cv2.CascadeClassifier.detectMultiScale()的分数?

时间:2012-11-29 07:58:33

标签: python opencv computer-vision

使用 Python 时,

openCV函数

cv.HaarDetectObjects()

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

如果我使用opencv2函数,

cv2.CascadeClassifier.detectMultiScale()

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

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

2 个答案:

答案 0 :(得分: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 );

答案 1 :(得分: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)