用Python实现OpenCV中的detectMultiScale参数

2024-04-25 22:59:04 发布

您现在位置:Python中文网/ 问答频道 /正文


Tags: python
3条回答

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

这是给cv::CascadeClassifier detectMultiScale的:

detectMultiScale

Python:

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

Parameters:

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.

Note

  • (Python) A face detection example using cascade classifiers can be found at 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)

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

  • scaleFactor–指定在每个图像比例上图像大小减少多少的参数。

基本上,比例因子用于创建比例棱锥体。更详细的解释是,您的模型在培训期间定义了一个固定的大小,这在XML中是可见的。这意味着,如果存在,则在图像中检测到该大小的面部。但是,通过重新调整输入图像的大小,可以将较大的面调整为较小的面,从而使该算法能够检测到该面。

1.05是一个很好的可能值,这意味着您使用一个小步骤来调整大小,即将大小减少5%,您将增加发现与模型匹配大小的机会。这也意味着算法的工作速度较慢,因为它更彻底。您可以将其增加到1.4,以加快检测速度,同时可能会丢失一些面孔。

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

此参数将影响检测到的面的质量。值越高,检测次数越少,但质量越高。3~6是一个很好的值。

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

此参数确定要检测的大小。你决定吧!通常,[30,30]是面部检测的良好开端。

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

此参数确定要检测的大小。再说一遍,你自己决定!通常,您不需要手动设置它,默认值假定您希望在不限制面部大小的情况下进行检测。

下面是一个代码示例: 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文件

相关问题 更多 >