Я пытаюсь использовать функцию findcontours() в OpenCV на изображении ниже.OpenCV findcontours возвращает 2 контура для каждого круга
findContours(img, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_NONE, cvPoint(0,0));
Когда я делаю запрос: contours.size()
возвращает 18, так что кажется, 2 контура для каждого круга. Круги - это как вы видите 1-пиксельную толщину, как 2 контура? Это одно для внешнего и одно для внутреннего, если да, то как я могу заставить эту функцию обнаруживать только один контур для каждого круга? Я думал, что контур определяется как связанная последовательность пикселей с толщиной в 1 пиксель.
Но когда я смотрю на этот пример [здесь] (http://jmpelletier.com/a-simple-opencv-tutorial/), кажется, что он не считает внутреннее и внешнее отдельно. Но в качестве примера есть версия версии findcontours. Есть ли разница между старой и новой версиями? –
Нет, не должно быть никаких различий между версией C и C++, которая повлияла бы на конечный результат. Фактически, из того, что я помню, это просто оболочка для другого. Однако, глядя на изображения с этой ссылки, я вижу полную противоположность тому, что вы сказали. он, кажется, обнаруживает как внутренний, так и внешний контур для каждого круга, что делает еще больше смысла на изображении, показанном там – Naps62
Действительно, использование флага CV_RETR_EXTERNAL должно исправить его для вас. См. Здесь полный список флагов: http://opencv.itseez.com/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html#void findContours (изображение InputOutputArray, контуры OutputArrayOfArrays, иерархия OutputArray, int mode, метод int, смещение точки) –