Я пытаюсь обнаружить эллипс, используя метод 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;
}
Эллипс, который я получаю, всегда вращается.
Я хочу получить высоту и ширина ограничительного прямоугольника, и в то же время мне нужно показать этот эллипс как вывод.