Контурное сравнение в opencv

Я должен создать код в 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 объекта для сравнения.

благодарю вас

0

Решение

Во-первых, вы должны определить, что вы подразумеваете под «другим» результатом.

Во-вторых, возможно, лучше использовать 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.

3

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

Других решений пока нет …

По вопросам рекламы [email protected]