4

我正在尝试http://docs.opencv.org/2.4.4-beta/doc/tutorials/introduction/desktop_java/java_dev_intro.html中的示例的细微变化

    CascadeClassifier faceDetector = new CascadeClassifier("/haarcascade_frontalface_default.xml");
    Mat image = Highgui.imread(originalFile.getAbsolutePath());
    MatOfRect faceDetections = new MatOfRect();
    double w = ((double)originalCrop.getWidth());
    double h = ((double)originalCrop.getHeight());
    faceDetector.detectMultiScale(image, faceDetections, 3, 1, 
                   Objdetect.CASCADE_DO_CANNY_PRUNING , new Size(w/16, h/16), new Size(w/2, h/2));

来自 API: scaleFactor – 指定在每个图像比例下图像尺寸减小多少的参数。

更改 scaleFactor 会更改检测到的内容。例如,对于以下图像: http: //graphics8.nytimes.com/images/2013/04/02/world/MOSCOW/MOSCOW-articleLarge-v2.jpg

scaleFactor of 3 --> Gorbachev 的脸未被检测到
scaleFactor of 2 --> Gorbachev 的脸被检测到两次(一个较大的矩形包含一个较小的矩形)
scaleFactor of 1.01 ---> Gorbachev 的脸被检测到一次

这究竟是如何工作的?

4

1 回答 1

5

opencv 论坛上回答:

基本上,比例因子用于创建比例金字塔。更多解释可以在这里找到。简而言之。您的模型在训练期间定义了固定大小。这意味着如果出现这种大小的人脸,就会在图像中检测到。但是,通过重新缩放输入图像,您可以将较大的人脸调整为较小的人脸,使其可被算法检测到。使用一小步来调整大小,例如 1.05,这意味着您将大小减小 5%,您增加了找到与模型匹配大小以进行检测的机会。

于 2013-04-04T15:14:38.890 回答