OpenCV || Утверждение matchShapes findContours не удалось

Я пытаюсь сопоставить два контура с помощью метода matchShapes, но всегда получаю ошибку утверждения. Я знаю, что это должно быть как-то связано с неправильным форматом Mat, но я не могу решить эту проблему.

findContours работает очень хорошо:

vector<vector<cv::Point> > contours;
cv::findContours(incomingimage,
                 contours, 
                 CV_RETR_EXTERNAL, 
                 CV_CHAIN_APPROX_SIMPLE);

vector<vector<cv::Point> > contourstwo;
cv::findContours(incomingimagetwo,
                 contourstwo, 
                 CV_RETR_EXTERNAL, 
                 CV_CHAIN_APPROX_SIMPLE);

Я получаю хороший результат от этих методов, но затем

matchShapes(Mat(contours), Mat(contourstwo), CV_CONTOURS_MATCH_I3, 0);

возвращается

Ошибка OpenCV: утверждение не удалось

Я немного в темноте здесь. Любая помощь будет высоко ценится.

Спасибо большое.


person Wim Vanhenden    schedule 20.02.2012    source источник
comment
Мне также нужно выполнить ту же работу, но я мало знаю об opencv. Не могли бы вы предоставить код, который вы реализовали для этой функции.   -  person Gypsa    schedule 24.08.2012


Ответы (2)


Я также новичок в openCV, но я только сегодня понял, как это решить (после многих проб и ошибок). Примерьте вот это

matchShapes(contours[0], contourstwo[0], CV_CONTOURS_MATCH_I3, 0);
person plutonim    schedule 27.02.2012

Вход в matchShapes согласно документации должен быть типа vector<Point>, а не vector<vector<Point> >, как и вывод findContours, просто перебираем каждый контур и передаем его в matchShapes.

person user2250856    schedule 16.07.2013