как изменить область формирования контуров в opencv (порог) - PullRequest
0 голосов
/ 16 сентября 2018

Я пытаюсь построить OCR для извлечения текста из изображения, я использую контуры при формировании границ текстовых символов,

После нескольких попыток изменения cv2.threshold я получил наилучшее соответствие контуров при формировании граництекстовые символы.

#files = os.listdir(r'letters/harry.jpeg',0)
file = r'/home/naga/Documents/Naga/Machine Learning/Data_extract/letters/Harry/Harry Potter and the Sorcerer s Stone-page-006.jpg'
im1 = cv2.imread(file,0)
im = cv2.imread(file)

# ret,thresh1 = cv2.threshold(im1,180,278,cv2.THRESH_BINARY)
# _,contours, hierarchy = cv2.findContours(thresh1,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

ret,thresh1 = cv2.threshold(im1,180,278,cv2.THRESH_BINARY)
kernel = np.ones((5,5),np.uint8)
dilated = cv2.dilate(im1,kernel,iterations = 1)
_,contours, hierarchy = cv2.findContours(dilated,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

for cnt in contours:
    x,y,w,h = cv2.boundingRect(cnt)
    #bound the images
    cv2.rectangle(im,(x,y),(x+w,y+h),(0,255,0),1)

cv2.namedWindow('BindingBox', cv2.WINDOW_NORMAL)
cv2.imwrite('output2/BindingBox4.jpg',im)

Contours on text with Opencv

Теперь я хотел бы создать контуры для слов.Мне нужны родительские контуры на каждое слово.Какие атрибуты нужно изменить в Open cv.

Я новичок в opencv, я прошел через cv2 threshold , но не мог понять, как его применить.Пожалуйста, укажите ваши входы в формировании контуров на словах.

original pic

1 Ответ

0 голосов
/ 16 сентября 2018

Простым решением было бы расширить результат порогового изображения перед запуском функции findcontour.

ret,thresh1 = cv2.threshold(im1,180,255,cv2.THRESH_BINARY_INV)
kernel = np.ones((5,5),np.uint8)
dilated = cv2.dilate(thresh1,kernel,iterations = 2)
contours, hierarchy = cv2.findContours(dilated,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

Дилатация - это морфологическая функция, которая увеличивает площадь бинарной капли. Он будет стремиться объединить все расположенные рядом двоичные объекты в единый двоичный объект, который является именно тем, что вам нужно для объединения текста в слова.

Вы можете увеличить номер итерации, если не весь ваш текст объединен в одно слово. Это требует некоторых проб и ошибок, если вы не знаете, какое значение использовать здесь.

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

В качестве дополнительного совета попробуйте поискать функцию adaptivethreshold в openCV. Это сделает вашу жизнь проще при бинаризации текстового изображения.

...