2016-05-09 3 views
1

У меня есть рабочая программа на C++ с использованием opencv, а часть ее - поиск контуров целых слов в изображении.Opencv xamarin findContours - как использовать иерархию

я это работает с ++ код

vector<cv::Vec4i> hierarchy; 
cv::findContours(connected, contours, hierarchy, CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE, cv::Point(0, 0)); 
for (int i = 0; i >= 0; i = hierarchy[i][0]) 
    { 
     ... 
    } 

Я пытаюсь перевести этот код на C# с помощью Xamarin запустить в на Android с помощью версии Java в OpenCV. Проблема в том, что я не знаю, как создать то же самое для цикла.

то, что у меня есть:

JavaList<MatOfPoint> contours = new JavaList<MatOfPoint>(); 
Mat hierarchy = new Mat(); 
Imgproc.FindContours(connected, contours, hierarchy, Imgproc.RetrCcomp, Imgproc.ChainApproxSimple, new Point(0, 0)); 

как я пишу тот же цикл здесь? Я использую двухуровневую иерархию контуров, потому что мне нужны внешние контуры, а не отверстия.

+0

http://docs.opencv.org/3.1.0/d9/d8b/tutorial_py_contours_hierarchy.html#gsc.tab=0 объясняет иерархию и почему это для цикла работает так, –

ответ

1

В случае, если кому-то нужен ответ на этот вопрос, я подумал об этом некоторое время назад, но у меня не было времени опубликовать его.

for(int i = 0; i >= 0;) 
    { 
     ... 
     double[] contourInfo = hierarchy.Get(0, i); 
     i = (int)contourInfo[0]; // this gives next sibling 
    } 

Оказались довольно легко после того, как вы понимаете esplaination здесь: http://docs.opencv.org/3.1.0/d9/d8b/tutorial_py_contours_hierarchy.html#gsc.tab=0

Надеется, что это помогает кому-то.

Смежные вопросы