Как мне найти пять меньших фигур
Я пытаюсь найти пять меньших фигур среди многих фигур, но моя программа не работает хорошо, можете ли вы сказать мне, в чем проблема
Что я уже пробовал:
Image<Gray, byte> imgOutput = imgInput.Convert<Gray, byte>(); binary = new Image<Gray, byte>(imgInput.Width, imgInput.Height, new Gray(0)); CvInvoke.AdaptiveThreshold(imgOutput, binary, 255, Emgu.CV.CvEnum.AdaptiveThresholdType.GaussianC, Emgu.CV.CvEnum.ThresholdType.Binary, 5, 0.0); Emgu.CV.Util.VectorOfVectorOfPoint contours = new Emgu.CV.Util.VectorOfVectorOfPoint(); Mat hier = new Mat(); CvInvoke.FindContours(binary, contours, hier, Emgu.CV.CvEnum.RetrType.External, Emgu.CV.CvEnum.ChainApproxMethod.ChainApproxSimple); Dictionary<int, double> dict = new Dictionary<int, double>(); if (contours.Size > 0) { for (int i = 0; i < contours.Size; i++) { double aera = CvInvoke.ContourArea(contours[i]); Rectangle rect = CvInvoke.BoundingRectangle(contours[i]); dict.Add(i, aera); } } var item = dict.OrderBy(v => v.Value).Take(5); foreach (var it in item) { int key = int.Parse(it.Key.ToString()); Rectangle rect = CvInvoke.BoundingRectangle(contours[key]); CvInvoke.Rectangle(imgInput, rect, new MCvScalar(255, 0, 0), 8); pictureBox2.Image = imgInput.Bitmap; } }
Afzaal Ahmad Zeeshan
5 самых маленьких фигур в списке, или 5 фигур меньше размера, или что?
Простой ответ был бы таков: перечислите фигуры с их площадью, а затем отсортируйте их в порядке убывания на основе их площади и, наконец, получите топ-5.
Member 14129828
спасибо
BillWoodruff
Привет, Афзаал, я предлагаю вам опубликовать это как решение; мне кажется, это все, что нужно. Я подозреваю, что ОП также может использовать здесь SortedDictionary.
Member 14129828
Да... это обязательно и спасибо за ответ
Afzaal Ahmad Zeeshan
Привет Билл, я опубликовал это в качестве ответа и включил ваше предложение для SortedDictionary с предупреждением для операции.