2016-01-23 7 views
2

Я работаю над программным обеспечением, которое должно распознавать несколько цифр. Для обрезки цифр изображения я использую openCV. Проблема в том, что алгоритм ограничивающей коробки не только обнаруживает цифры. Он также обнаруживает структуру в цифре. enter image description hereОпределить цифры с помощью алгоритма OpenCV Bounding Box в Python

Самый простой способ решить эту задачу - установить минимальный размер, который должна иметь структура. Это не работает, потому что я должен обнаруживать цифры любого размера. Есть ли у кого-нибудь идея решить эту проблему?

Это код:

im = cv2.imread('img.jpg') 
    gray=cv2.cvtColor(im,cv2.COLOR_BGR2GRAY) 
    contours,hierarchy = cv2.findContours(gray,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE) 
    idx = 0 
    for cnt in contours: 

      xe,ye,we,he = cv2.boundingRect(cnt) 
      roi=im[ye-100:ye+he+100,xe-100:xe+we+100] 

      if xe > 30: 
        if ye > 30: 
          if he > 30: 
            if we > 30: 
              idx += 1 
              cv2.imwrite(str(idx) + '.jpg', roi) 
              cv2.rectangle(im,(xe,ye),(xe+we,ye+he),(200,0,0),2) 


              cv2.imwrite('dev.jpg', im) 
+1

попробовать 'RETR_EXTERNAL' вместо' RETR_LIST' Он должен извлечь только внешний контур, если я понял документацию правильно. – M4rtini

+0

Большое спасибо. Это работает – avaj

+0

@ M4rtini: можете ли вы превратить это в ответ для дальнейшего использования? – gariepy

ответ

1

Согласно documentation.

Вы можете изменить режим метода findContours только вернуть крайние контуры, изменив cv2.RETR_LIST к параметру Я cv2.RETR_EXTERNAL

режима поиска контура (если вы используете Python см также примечание ниже).

  • CV_RETR_EXTERNAL извлекает только крайние внешние контуры. Он устанавливает иерархию [i] [2] = иерархию [i] [3] = - 1 для всех контуров.

  • CV_RETR_LIST извлекает все контуры без установления каких-либо иерархических отношений.

  • CV_RETR_CCOMP извлекает все контуры и организует их в двухуровневую иерархию. На верхнем уровне имеются внешние границы . На втором уровне есть границ отверстий. Если в отверстии подключенного компонента есть другой контур, он все еще находится на верхнем уровне.

  • CV_RETR_TREE извлекает все контуры и восстанавливает полную иерархию вложенных контуров. Эта полная иерархия построена и показана
    в демонстрации OpenCV contours.c.

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

  • Нет связанных вопросов^_^