контур не равен контуру [я]?

Это основано на этот вопрос, который сосредоточен больше на OpenCV C ++, поэтому я решил сделать этот вопрос. Это одна часть моей программы:

vector<vector<Point> > contours;
vector<vector<Point> > largest_contours;

double largest_area = 0;
for(int i= 0; i < contours.size(); i++){
double area = contourArea(contours[i]);
if(area >= largest_area){
largest_area = area;
largest_contours = contours[i];  <---THIS is the problem
}
}

В принципе программа Сделаю:

  1. Сканирует все контуры, обнаруженные в последовательностях изображений / видео
  2. Обозначает контуры как contours[i]
  3. Рассчитывает площадь каждого контура
  4. Сравнивает contours[i] на основании площади. Чем больше площадь становится largest_area и самый большой контур станет largest_contours
  5. В заключение, DrawContours а также imshow

Строка с проблемой покажет это сообщение над мышью:

Error: No operator "=" matches these operands

Вопрос в том, почему contours[i] НЕ равно largest_contours несмотря на то, что они имеют одинаковый класс (vector<vector<Point> >) и иметь только одно значение для каждого контура за раз? Может кто-нибудь объяснить, почему и как это решить?

Заранее спасибо.

РЕДАКТИРОВАТЬ (1): Изменено contourArea(contours) в contourArea(contours[i]), Добавлена ​​декларация для largest_contours а также contours,

0

Решение

Вы, кажется, путаетесь между тем, когда у вас есть коллекция чего-то и когда у вас ее нет. Я предполагаю, что vector<Point> это то, что вы считаете «контур» и vector<vector<Point>> это набор контуров.

Как вы цикл от 0 до contours.size()вы работаете contourArea(contours) который будет точно таким же каждый раз, потому что вы никогда не модифицируете contours, Мне кажется, что вы хотите проработать область индивидуального контура и должны делать что-то вроде contourArea(contours[i]),

Затем, если вы хотите список ваших самых больших контуров, который также имеет тип vector<vector<Point>>, то вам нужно нажать каждый из контуров, которые вы найдете в этом vector, Если contours[i] контур, который вы хотите добавить в список, вы бы сделали это с largest_contours.push_back(contours[i]);,

1

Другие решения

Здесь есть несколько проблем, точная причина ваших проблем не может быть определена без полных деклараций, однако есть несколько вещей, которые выглядят здесь странно:

double area = contourArea(contours);

Похоже, вы определяете площадь всех контуров в целом — каждую итерацию. Это звучит неправильно.

largest_contours = contours[i];

Скорее всего, это не получится, так как для контуров нет оператора присваивания. Как насчет сохранения индекса (если вы не хотите сохранить всю структуру (?)).

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector