@i_vovani

Качественная детекция текста,если он одного цвета с фоном?

Товарищи,передо мной встала задача детекции букв на картинке с шиной,вот пример:
5f4aaa21823f1138689313.jpeg
Для решения данного вопроса я решил использовать OpenCV,но во время того,как я хочу сделать threshold,возникает много лишних ненужных пикселей,как тут:
5f4aaaf023470187902377.png
Как это можно исправить,чтобы корректно находились контуры букв на изображении?
Вот функция,которая отвечает за детекцию:
def detecting_and_extracting_letters(path,out_size=28):
    img = cv2.imread(path,0)
    thresh = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY,11,2)
    img_erode = cv2.erode(thresh, np.ones((3, 3), np.uint8), iterations=1)
    contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
    
    output = img.copy()
    letters = []

    for idx, contour in enumerate(contours):
        (x, y, w, h) = cv2.boundingRect(contour)
        if hierarchy[0][idx][3] == 0:
            cv2.rectangle(output, (x, y), (x + w, y + h), (70, 0, 0), 1)



            letter_crop = gray[y:y + h, x:x + w]
            # print(letter_crop.shape)

            size_max = max(w, h)
            letter_square = 255 * np.ones(shape=[size_max, size_max], dtype=np.uint8)
            if w > h:
                y_pos = size_max//2 - h//2
                letter_square[y_pos:y_pos + h, 0:w] = letter_crop
            elif w < h:
                x_pos = size_max//2 - w//2
                letter_square[0:h, x_pos:x_pos + w] = letter_crop
            else:
                letter_square = letter_crop

            letters.append((x, w, cv2.resize(letter_square, (out_size, out_size), interpolation=cv2.INTER_AREA)))

    letters.sort(key=lambda x: x[0], reverse=False)
    return letters
  • Вопрос задан
  • 215 просмотров
Решения вопроса 1
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
1. Уберите фон с помощью выравнивания: приведения градиента к одному цвету.
2. Очистите от незамкнутых областей.
3. Сегментируйте замкнутые области.
4. Повторять до тех пор, пока результат перестанет меняться.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы