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,它只适用于灰度

  • 尝试交易速度以获得准确性,并使用lbpcascade而不是haar

  • cv2.imwrite("myface.png", img[ face[1]:face[1]+face[3], face[0]:face[0]+face[2] ] ); 应该挽回颜面投资回报率

于 2013-10-16T19:12:36.237 回答
0

文档在这里:http ://docs.opencv.org/modules/objdetect/doc/cascade_classification.html

您可以尝试两件简单的事情来加速检测(均以降低准确性为代价):

  • 您可以增加 scaleFactor,默认值为 1.1,您可以尝试 1.2 或 1.3,这意味着在多尺度扫描的每个尺度上,它都会将图像下采样一个更大的因子。
  • 您可以设置一个相对较大的最小人脸尺寸,例如(64,64),这意味着它将停止搜索较小的人脸,从而节省时间。如果您或多或少知道场景中面部的大小,您还可以尝试最大面部大小。
于 2013-10-16T18:06:06.763 回答