2016-06-02 4 views
0

Недавно я попробовал обновить свои библиотеки Emgu с 2.4.2 до 3.0.0. Таким образом, в версии произошли значительные изменения, и у меня возникли проблемы с изменением кода, чтобы он работал.EMGU 3.0.0 OpenCV Вставка и удаление контурных точек

Версия Emgu 2.4.2 была контурного Класс: http://www.emgu.com/wiki/files/2.4.2/do ... Index.html

Мой код использует это, и иногда я извлекаю точек с помощью метода RemoveAt или добавления точек с помощью метода Insert. Мой первоначальный контур может содержать точки, которые являются выбросами (из-за различных критериев, таких как кривизна, расстояние между соседними точками и т. Д.).

То, что я пытался сделать в новой версии Emgu, было использование класса VectorOfPoint. Он работает для большей части моего кода, но он по-прежнему не имеет (насколько я могу судить) никакого эквивалента метода RemoveAt. Кажется, что-то похоже на метод Insert (метод Push: http://www.emgu.com/wiki/files/3.0.0/document/html/9f6838b0-d946-adc6-e14e-8f223079f5e3.htm), хотя я не уверен, что это именно то, что я хочу.

Я смотрел этот вопрос немного дальше, и увидел, что класс Мат имеет PushBack и PopBack метод, который позволяет добавлять и удалять элементы в конце последовательности. Однако, поскольку у меня был код раньше, я удалял элементы в определенных местах (метод RemoveAt позволяет вводить индекс i элемента, который нужно удалить).

В качестве примера, это, как я использовал метод RemoveAt перед:

for (int i = nPoints - 1; i >= 0; i--) 
       { 
        if (!goodPoint[i]) 
        { 
         shapeContour.RemoveAt(i); 
         continue; 
        } 
       } 

Я не вижу прямой функции я могу использовать в новой версии Emgu. Я ошибаюсь?

Буду признателен за любую помощь. Заранее спасибо.

+0

В чем именно вам нужна помощь? [ask] Вы должны добавить свой соответствующий код к вопросу, а также добавить теги для языка программирования и соответствующих библиотек, которые вы используете. –

ответ

0

Чтобы удалить значение из VectorOfPoint, вы используете pop() (удаляет и извлекает значение из конца вектора), ther не является методом «удалить по индексу», но, очевидно, вы можете создать свой собственный с помощью pop () и нажмите() (вставьте в конец вектора).

+0

Так что, глядя на класс VectorOfPoint, я не вижу метод ** Pop() **, а просто метод ** Push() **: http://www.emgu.com/wiki/files/3.0. 0/document/html/05a55c58-b440-ca74-439c-f288410e692f.htm Мне лучше найти мои «хорошие» точки, а затем создать новый объект VectorOfPoint, посредством чего я вставляю только «хорошие» точки? – solarflare

+0

Список точек = новый Список (vec.toArray()); points.removeAt (i) .... points.add (x) .... VectorOfPoints vec2 = new VectorOfPoints (points.toArray()); –

+0

Вы можете создать функцию, которая выполняет вышеприведенный код, еще лучше для вас - создать метод расширения для VectorOfPoint (статический метод с первым параметром как «этот VectorOfPoint». –