2

私は最近opencvの学習を開始し、Pythonで画像内の顔を検出し、検出されたすべての顔を個別の画像として保存するプログラムを作成しました。一部の画像では正常に機能しますが、多くの画像ですべての顔を検出できません。

この( http://imgur.com/HUh3tIK )簡易画像でも失敗します。右の顔のみを検出し、左の顔は検出しません。これを修正して精度を上げる方法を教えてください。

import cv2.cv as cv
import string
im = cv.LoadImageM("D:\Test\Dia.jpg")
storage = cv.CreateMemStorage()
haar=cv.Load("C:\opencv\data\haarcascades\haarcascade_frontalface_default.xml")
detected = cv.HaarDetectObjects(im, haar, storage, 1.1, 2,cv.CV_HAAR_DO_CANNY_PRUNING,(10,10))
i = 0
if detected:
    for face in detected:
        i = i + 1
        xx = face[0][0]
        yy = face[0][1]
        width = face[0][2]
        height = face[0][3]

        pankaj12 = (width,height)
        cvIm = cv.LoadImage("D:\Test\Dia.jpg")

        cropped = cv.CreateImage(pankaj12,cvIm.depth, cvIm.nChannels)
        src_region = cv.GetSubRect(cvIm, face[0])
        cv.Copy(src_region, cropped)
        cv.SaveImage("D:\Test\Pankaj"+str(i)+".jpg",cropped)

input("Press Enter to continue...")
4

1 に答える 1

1

OpenCV で提供されているさまざまな haarcascades 分類子を使用してアルゴリズムを複数回実行し、結果を組み合わせることで、運が良くなりました。

実際には、2 つの分類子が同様の結果を見つけた場合、それらを組み合わせて、組み合わせた結果により高いスコア値を与えることができます。

検出をさらに改善するために、分類子を使用して目、鼻、口を検出することもできます。検出された顔の中にそれらが見つかった場合は、それらの顔にさらに価値を追加することもできます。

プロセスの最後で、検出された顔のリストとスコア値を取得できます。スコアが高いほど、検出が正しい可能性が高くなります。

これが役立つことを願っています。

于 2013-11-14T21:49:29.347 に答える