Работа с последовательностями в OpenCV?

У меня есть 2 последовательности. Один (назовем его cvSeq x), который содержит ряд контуров (полученных из cvFindContours), и второй (назовем этот cvSeq y), для которого я использовал cvCreateSeq, но на самом деле в нем ничего нет. Я перебираю все контуры по x и, если контур соответствует определенным критериям, добавляю его к y. Я могу сделать цикл, но я не знаю, как добавить контур от x до y, если он соответствует критериям.

Кто-нибудь знает, как добавить контур из последовательности в другую последовательность (пустую)? Примеры кода приветствуются.

PS: cvStartFindContours не вариант.


person fdh    schedule 19.11.2011    source источник


Ответы (1)


Решением было бы использование интерфейса C++ вместо старого. Это намного проще в использовании. Контуры сохраняются как vector<vector<Point>>

Вы можете использовать его аналогичным образом:

Mat myImg = (Mat)myIplImage;
//or better
Mat myImg = imread("image.jpg");

vector<vector<Point>> contours;

cv::findContours(myImg, contours,...);

Теперь доступ к контурам и точкам намного проще и легче

Примечание Я не проверял точность кода. Вы должны проверить правильный способ отправки параметров в findContours и все остальное.

person Sam    schedule 19.11.2011
comment
Благодарю вас. Еще один вопрос - вы сказали, что контуры хранятся как вектор‹вектор‹Точка››. Будет ли это по-прежнему применяться к одному контуру? Разве это не будет сохранено как vector‹Point› ? - person fdh; 21.11.2011
comment
Он должен храниться так же, как и другие контуры. Таким образом, вектор, содержащий контуры, будет иметь size()==1. - person Sam; 21.11.2011