2017-01-16 3 views
0

Как удалить короткую и отсоединенную линию, но сохранить все остальные связанные строки на следующем изображении?OpenCV - Удаление независимой короткой строки на изображении

There is an independent short line in top right corner image

+0

Как об использовании морфологических операций искать переходы, а затем отбрасывая строки, которые не имеют перекрестков? –

ответ

1

Если изображение всегда это хорошо связан, вы можете выбрать компоненты, основываясь на их размере. Мой код в Python (может быть более простым способом, но это, как я это делаю):

#get all connected components in the image with their stats (including their size, in pixel) 
nb_edges, output, stats, _ = cv2.connectedComponentsWithStats(img, connectivity=8) 
#output is an image where every component has a different value  
size=stats[1:,-1] #extracting the size from the statistics 

#selecting bigger components 
for e in range(0,nb_edges-1): 
    #replace this line depending on your application, here I chose to keep 
    #all components above the mean size of components in the image 
    if size[e]>=np.mean(size): 
     th_up = e + 2 
     th_do = th_up 

     #masking to keep only the components which meet the condition 
     mask = cv2.inRange(output, th_do, th_up) 
     result = cv2.bitwise_xor(original_img, mask) 
+0

Спасибо! Но не могли бы вы изменить его на C++. У Python есть некоторая ошибка с opencv3. И я также не знаком с Python. Извините –

+0

Подключенные компоненты - лучший способ пойти. @BryanYU PLS не ожидают, что люди напишут явный код для вас. Существует достаточно документации для преобразования Python в C++ и наоборот –

+0

Благодарим вас за предложение. –

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