EmguCv FitEllipse Вращенный эллипс - PullRequest
0 голосов
/ 10 марта 2020

Я пытаюсь обнаружить эллипс, используя метод fitellipse EmguCv. Это код, который я использую.

 public static Mat[] FindCircle(Mat img,double Threshold)
    {
        Mat[] Outputs = new Mat[2];

        cannyThreshold = Threshold;
        Mat canny = new Mat();
        Mat grayscale = new Mat();
        UMat pyrdown = new UMat();
        Mat contoursOut = new Mat();
        CvInvoke.CvtColor(img, grayscale, ColorConversion.Bgr2Gray);
        CvInvoke.PyrDown(grayscale, pyrdown);
        CvInvoke.PyrUp(pyrdown, grayscale);

      ThresholdType.Mask);
        CvInvoke.Canny(grayscale, canny, cannyThreshold, cannyThreshold*2);

        Image<Bgr, Byte> output = img.ToImage<Bgr, Byte>();

        VectorOfVectorOfPoint contours = new VectorOfVectorOfPoint();

        CvInvoke.FindContours(canny, contours, null, RetrType.List, ChainApproxMethod.ChainApproxSimple);

        // CvInvoke.DrawContours(output, contours, -1, new MCvScalar(255, 0, 0));


        for (int i = 0; i < contours.Size; i++)
        {

            try
            {
                RotatedRect temp = CvInvoke.MinAreaRect(contours[i]);

                Ellipse ellipse = new Ellipse(CvInvoke.FitEllipse(contours[i]));

                output.Draw(ellipse, new Bgr(255,0,0), 1);
            }
            catch (Exception ex)
            {

            }

        }

        Outputs[0] = output.Mat;
        Outputs[1] = canny;

        return Outputs;
    }

Эллипс, который я получаю, всегда вращается. enter image description here

Я хочу получить высоту и ширина ограничительного прямоугольника, и в то же время мне нужно показать этот эллипс как вывод.

...