Exemplo n.º 1
0
 /// <summary>
 /// Finds rectangular regions in the given image that are likely to contain objects the cascade has been trained for and returns those regions as a sequence of rectangles. 
 /// The function scans the image several times at different scales. Each time it considers overlapping regions in the image. 
 /// It may also apply some heuristics to reduce number of analyzed regions, such as Canny prunning. 
 /// After it has proceeded and collected the candidate rectangles (regions that passed the classifier cascade), it groups them and returns a sequence of average rectangles for each large enough group. 
 /// </summary>
 /// <param name="image">The image where the objects are to be detected from</param>
 /// <param name="scaleFactor">The factor by which the search window is scaled between the subsequent scans, for example, 1.1 means increasing window by 10%</param>
 /// <param name="minNeighbors">Minimum number (minus 1) of neighbor rectangles that makes up an object. All the groups of a smaller number of rectangles than min_neighbors-1 are rejected. If min_neighbors is 0, the function does not any grouping at all and returns all the detected candidate rectangles, which may be useful if the user wants to apply a customized grouping procedure. Use 3 for default.</param>
 /// <param name="minSize">Minimum window size. Use Size.Empty for default, where it is set to the size of samples the classifier has been trained on (~20x20 for face detection)</param>
 /// <param name="maxSize">Maximum window size. Use Size.Empty for default, where the parameter will be ignored.</param>
 /// <returns>The objects detected, one array per channel</returns>
 public Rectangle[] DetectMultiScale(IInputArray image, double scaleFactor = 1.1, int minNeighbors = 3, Size minSize = new Size(), Size maxSize = new Size())
 {
    using (Util.VectorOfRect rectangles = new Util.VectorOfRect())
    using (InputArray iaImage = image.GetInputArray())
    {
       CvCascadeClassifierDetectMultiScale(_ptr, iaImage, rectangles, scaleFactor, minNeighbors, 0, ref minSize, ref maxSize);
       return rectangles.ToArray();
    }
 }
Exemplo n.º 2
0
 /// <summary>
 /// Perform detection on the image
 /// </summary>
 /// <param name="mat">The image for detection.</param>
 /// <returns>The detection result</returns>
 public ObjectDetection[] Detect(Mat mat)
 {
     using (Util.VectorOfRect rects = new Util.VectorOfRect())
         using (Util.VectorOfFloat scores = new Util.VectorOfFloat())
             using (Util.VectorOfInt classIds = new Util.VectorOfInt())
             {
                 DpmInvoke.cveDPMDetectorDetect(_ptr, mat, rects, scores, classIds);
                 ObjectDetection[] detections = new ObjectDetection[rects.Size];
                 for (var i = 0; i < detections.Length; i++)
                 {
                     detections[i] = new ObjectDetection(rects[i], scores[i], classIds[i]);
                 }
                 return(detections);
             }
 }