使用Python

时间:2016-03-25 10:42:10

标签: python opencv object-detection

我无法理解传递给detectMultiScale的参数。我知道一般语法是detectMultiScale(image,rejectLevels,levelWeights) 但是,参数rejectLevels和levelWeights是什么意思?用于检测物体的最佳值是什么?

我想用它来检测眼睛的瞳孔

4 个答案:

答案 0 :(得分:6)

可在此处找到代码示例: http://docs.opencv.org/3.1.0/d7/d8b/tutorial_py_face_detection.html#gsc.tab=0

关于参数说明,您可能引用了旧的参数定义,实际上您可能会遇到以下参数:

  • scaleFactor:指定图像尺寸减少程度的参数 在每个图像比例。
  • minNeighbors:指定每个候选矩形应保留多少个邻居的参数

在这里你可以找到关于这些参数的一个很好的解释: http://www.bogotobogo.com/python/OpenCV_Python/python_opencv3_Image_Object_Detection_Face_Detection_Haar_Cascade_Classifiers.php

确保为面部和眼睛获得适当的预训练分类器集,例如

  • haarcascade_frontalface_default.xml
  • haarcascade_eye.xml

答案 1 :(得分:1)

在这些参数中,您需要更多注意其中四个:

  • scaleFactor –该参数指定每个图像比例缩小多少图像。

基本上,比例因子用于创建比例金字塔。进一步说明,您的模型具有在训练期间定义的固定大小,该大小在XML中可见。这意味着在图像中会检测到脸部大小(如果存在)。但是,通过重新缩放输入图像,可以将较大的面孔调整为较小的面孔,从而使其可以被算法检测到。

1.05可能是一个很好的值,这意味着您需要花一小步来调整大小,即将大小减小5%,从而增加了找到与检测模型匹配大小的机会。这也意味着该算法工作更慢,因为它更彻底。您可以将其增加到1.4,以便更快地进行检测,并且可能会丢失一些面部。

  • minNeighbors –该参数指定每个候选矩形必须保留多少个邻居。

此参数将影响检测到的面部的质量。更高的值导致更少的检测结果,但质量更高。 3〜6是个不错的选择。

  • minSize –最小可能的对象大小。小于此值的对象将被忽略。

此参数确定要检测的尺寸很小。您决定!通常,[30,30]是面部检测的良好起点。

  • maxSize –可能的最大对象大小。大于此值的对象将被忽略。

此参数确定您要检测的大小。同样,您决定!通常,您无需手动设置它,默认值假定您要检测的脸部大小没有上限。

答案 2 :(得分:0)

OpenCV Class List docs提供了所有C ++和Python方法的描述。

这里是cv::CascadeClassifier detectMultiScale的那个:

  

detectMultiScale

     

Python

     
objects = cv.CascadeClassifier.detectMultiScale(image[, scaleFactor[, minNeighbors[, flags[, minSize[, maxSize]]]]]
     

参数

     
image            Matrix of the type CV_8U containing an image where objects
                 are detected.  

objects          Vector of rectangles where each rectangle contains the  
                 detected object, the rectangles may be partially outside  
                 the original image.  

scaleFactor      Parameter specifying how much the image size is reduced 
                 at each image scale.  

minNeighbors     Parameter specifying how many neighbors each candidate  
                 rectangle should have to retain it.

flags            Parameter with the same meaning for an old cascade as in  
                 the function cvHaarDetectObjects. It is not used for a  
                 new cascade.

minSize          Minimum possible object size. Objects smaller than that  
                 are ignored.  

maxSize          Maximum possible object size. Objects larger than that  
                 are ignored. If maxSize == minSize model is evaluated  
                 on single scale.

     

注意

     
      
  • (Python)使用级联分类器的人脸检测示例可以在opencv_source_code / samples / python / facedetect.py
  • 中找到   

如前所述,OpenCV source code提供了示例用法。您可以将每个记录的参数作为关键字传递。

rects = cascade.detectMultiScale(img, 
                                 scaleFactor=1.3, 
                                 minNeighbors=4, 
                                 minSize=(30, 30),
                                 flags=cv.CASCADE_SCALE_IMAGE)

答案 3 :(得分:0)

detectMultiScale 函数用于检测人脸。此函数将返回一个矩形,其坐标为 (x,y,w,h) 围绕检测到的人脸。

它需要 3 个常用参数 - 输入图像、scaleFactor 和 minNeighbours。

scaleFactor 指定每个比例缩小多少图像尺寸。在合影中,可能有一些人脸比其他人更靠近相机。自然而然,这样的面孔会比后面的面孔显得更加突出。这个因素弥补了这一点。

minNeighbours 指定每个候选矩形应该有多少个邻居来保留它。您可以在此处详细了解它。您可能需要调整这些值以获得最佳结果。此参数指定矩形必须称为面的邻居数。

我们在经过特定范围的试验和测试后获得这些值。