0
import cv2
cam = cv2.VideoCapture(0)
s, img = cam.read()

winName = "Movement Indicator"
cv2.namedWindow(winName, cv2.CV_WINDOW_AUTOSIZE)

while s:
    cv2.imshow( winName,img )

    s, img = cam.read()
    hc = cv2.CascadeClassifier("foo.xml") #xml file for detection
    faces = hc.detectMultiScale(img)
    for face in faces:
        cv2.rectangle(
            img, (face[0], face[1]), (face[0] + face[2], face[0] + face[3]),
            (255, 0, 0), 3
        )

    key = cv2.waitKey(10)
    if key == 27:
        cv2.destroyWindow(winName)
        break
4

2 に答える 2

0

それは本当にすべてのコードですか?iirc、グレースケールでのみ機能します

  • 正確さのために速度を犠牲にしてみてください。haar の代わりに lbpcascade を使用してください。

  • cv2.imwrite("myface.png", img[ 顔[1]:顔[1]+顔[3], 顔[0]:顔[0]+顔[2] ] ); 顔ロイを保存する必要があります

于 2013-10-16T19:12:36.237 に答える
0

ドキュメントはこちら: http://docs.opencv.org/modules/objdetect/doc/cascade_classification.html

検出を高速化するために試すことができる 2 つの簡単な方法 (どちらも精度が低下します)。

  • scaleFactor を増やすことができます。デフォルト値は 1.1 です。1.2 または 1.3 を試すことができます。これは、マルチ スケール スキャンの各スケールで、より大きな係数で画像をダウンサンプリングすることを意味します。
  • たとえば (64,64) のように、顔の最小サイズを比較的大きく設定できます。これは、より小さい顔の検索を停止することを意味し、時間を節約します。シーンでの顔のサイズが多かれ少なかれわかっている場合は、顔の最大サイズを試すこともできます。
于 2013-10-16T18:06:06.763 に答える