Я должен создать код в opencv / c ++, который может найти контур изображения (лист)
поэтому после получения результата контура от метода
findContours( canny_output, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0) );
результат этого метода будет сохранен в виде «контуры» (OutputArrayofArrays
)
так проблема в том, как сравнить эти результаты с другими?
Я считаю, что этот метод можно сравнить, но я не могу его использовать!
double compare = cvMatchShapes(R, T, CV_CONTOURS_MATCH_I1);
R, T: 2 объекта для сравнения.
благодарю вас
Во-первых, вы должны определить, что вы подразумеваете под «другим» результатом.
Во-вторых, возможно, лучше использовать cv::matchShapes
(Интерфейс C ++) вместо cvMatchShapes
(Интерфейс C) — у вас будет меньше проблем с совместимостью / преобразованием типов.
тип «контуры» отcv::findContours
не более чем vector<vector<cv::Point>
я е. на его выходе более одного контура.
cv::matchShapes
принимает vector<cv::Point>
или же cv::Mat
в качестве входных параметров, т.е. е. Вы можете сравнить только 2 контура с этой функцией.
Таким образом, вы должны сначала извлечь интересующие вас контуры (например, с более чем N точками или с общей длиной более X) из cv::findConntours
вывод, а затем сравнить каждый контур с другим.
Если вы заинтересованы в сравнении контуров от следующего cv::findContours
Вызовите выход, вы можете сделать это с помощью любой техники сопоставления для элементов массива (например, перебор, т.е. каждый элемент предыдущего массива с каждым элементом текущего массива).
Еще немного информации можно найти в документации OpenCV: Версия 3.0 или же Версия 2.4.
Других решений пока нет …