Извлечь внутренние контуры (ОТВЕРСТИЯ) OpenCV

Нет ли способа извлечь или отобразить отверстия, отбрасывая внешние контуры?

Я могу отображать только внешние контуры, используя CV_RETR_EXTERNAL, но, похоже, нет возможности отображать только внутренние контуры (отверстия).


person Saleh    schedule 03.01.2012    source источник


Ответы (1)


Вы можете использовать что-то вроде этого с интерфейсом C:

cvFindContours(tmp, storage, &srcSeq, sizeof(CvContour), 
                       CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE);
        while (srcSeq)
        {
            if (CV_IS_SEQ_HOLE(srcSeq))
            {
                // do something with the hole
            }
            srcSeq = srcSeq->h_next;
        }

Если вы используете интерфейс C++, вам придется использовать параметр иерархии из FindContours(), чтобы увидеть, является ли контур отверстием.

person Adrian    schedule 03.01.2012
comment
Нет, это не сработало... я хочу отображать контуры с помощью cvDrawContours(src1,c,red,blue,1,0.25,8); Я не могу отделить отверстия от внешних контуров... как внешние, так и внутренние контуры в большинстве случаев имеют одинаковые флаги... только несколько внешних контуров имеют разные флаги... короче, в случае кода ur отображаются как внешние контуры, так и отверстия ...все равно спасибо за помощь ;) - person Saleh; 03.01.2012
comment
Что ж, чтобы нарисовать только ту дыру, которую вы отметили в «если», вам придется вызвать cvDrawContours с параметром maxLevel = 0. Что-то вроде этого: cvDrawContours(src1, srcSeq, red, blue, 0, 0.25, 8); - person Adrian; 03.01.2012