OpenCvSharp.CascadeClassifier.DetectMultiScale C# (CSharp) Méthode

DetectMultiScale() public méthode

Detects objects of different sizes in the input image. The detected objects are returned as a list of rectangles.
public DetectMultiScale ( OpenCvSharp.Mat image, int &rejectLevels, double &levelWeights, double scaleFactor = 1.1, int minNeighbors = 3, HaarDetectionType flags, Size minSize = null, Size maxSize = null, bool outputRejectLevels = false ) : Rect[]
image OpenCvSharp.Mat Matrix of the type CV_8U containing an image where objects are detected.
rejectLevels int
levelWeights double
scaleFactor double Parameter specifying how much the image size is reduced at each image scale.
minNeighbors int Parameter specifying how many neighbors each candidate rectangle should have to retain it.
flags HaarDetectionType Parameter with the same meaning for an old cascade as in the function cvHaarDetectObjects. /// It is not used for a new cascade.
minSize Size Minimum possible object size. Objects smaller than that are ignored.
maxSize Size Maximum possible object size. Objects larger than that are ignored.
outputRejectLevels bool
Résultat Rect[]
        public virtual Rect[] DetectMultiScale(
            Mat image,
            out int[] rejectLevels,
            out double[] levelWeights,
            double scaleFactor = 1.1,
            int minNeighbors = 3,
            HaarDetectionType flags = 0,
            Size? minSize = null,
            Size? maxSize = null,
            bool outputRejectLevels = false)
        {
            if (disposed)
                throw new ObjectDisposedException("CascadeClassifier");
            if (image == null)
                throw new ArgumentNullException(nameof(image));
            image.ThrowIfDisposed();

            Size minSize0 = minSize.GetValueOrDefault(new Size());
            Size maxSize0 = maxSize.GetValueOrDefault(new Size());

            using (var objectsVec = new VectorOfRect())
            using (var rejectLevelsVec = new VectorOfInt32())
            using (var levelWeightsVec = new VectorOfDouble())
            {
                NativeMethods.objdetect_CascadeClassifier_detectMultiScale2(
                    ptr, image.CvPtr, objectsVec.CvPtr, rejectLevelsVec.CvPtr, levelWeightsVec.CvPtr,
                    scaleFactor, minNeighbors, (int)flags, minSize0, maxSize0, outputRejectLevels ? 1 : 0);

                rejectLevels = rejectLevelsVec.ToArray();
                levelWeights = levelWeightsVec.ToArray();
                return objectsVec.ToArray();
            }
        }

Same methods

CascadeClassifier::DetectMultiScale ( OpenCvSharp.Mat image, double scaleFactor = 1.1, int minNeighbors = 3, HaarDetectionType flags, Size minSize = null, Size maxSize = null ) : Rect[]

Usage Example

        /// <summary>
        /// 
        /// </summary>
        /// <param name="cascade"></param>
        /// <returns></returns>
        private Mat DetectFace(CascadeClassifier cascade)
        {
            Mat result;

            using (var src = new Mat(FilePath.Image.Yalta, ImreadModes.Color))
            using (var gray = new Mat())
            {
                result = src.Clone();
                Cv2.CvtColor(src, gray, ColorConversionCodes.BGR2GRAY);

                // Detect faces
                Rect[] faces = cascade.DetectMultiScale(
                    gray, 1.08, 2, HaarDetectionType.ScaleImage, new Size(30, 30));

                // Render all detected faces
                foreach (Rect face in faces)
                {
                    var center = new Point
                    {
                        X = (int)(face.X + face.Width * 0.5),
                        Y = (int)(face.Y + face.Height * 0.5)
                    };
                    var axes = new Size
                    {
                        Width = (int)(face.Width * 0.5),
                        Height = (int)(face.Height * 0.5)
                    };
                    Cv2.Ellipse(result, center, axes, 0, 0, 360, new Scalar(255, 0, 255), 4);
                }
            }
            return result;
        }
All Usage Examples Of OpenCvSharp.CascadeClassifier::DetectMultiScale