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 に答える