Удалите ненужный текст при обнаружении логотипа - обработка изображений, компьютерное зрение - PullRequest
0 голосов
/ 12 марта 2019

Я пытаюсь определить логотип в счетах.Хотя я могу получить некоторые результаты, но недостаточно для обработки.При обнаружении логотипов также обнаруживается нежелательный текст.Ниже приведены фактические данные счета: - исходное изображение

и следующие результаты, которые я получаю Изображение после операции

Я пользуюсь следующимкод, который я написал: -

gray=cv2.imread("Image",0)
ret,thresh1 = cv2.threshold(gray,180,255,cv2.THRESH_BINARY)
kernel_logo = np.ones((10,10),np.uint8)
closing_logo = cv2.morphologyEx(thresh1,cv2.MORPH_CLOSE,kernel_logo, 
iterations = 1)
n=3
noise_removed_logo = cv2.medianBlur(closing_logo, n)

eroded_logo = cv2.erode(noise_removed_logo,kernel_logo, iterations = 8)
dilated_logo=cv2.dilate(eroded_logo,kernel_logo, iterations=3)

Не могли бы вы помочь мне, какие изменения я должен сделать, чтобы удалить шум из моего документированного изображения.Я новичок в Computer Vision

Еще несколько примеров: - Оригинальный документ Результат, который я получаю: - Результат после операций с документом

1 Ответ

0 голосов
/ 19 марта 2019

Привет Мохд Анас Хан.

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

Например, в следующем подходе я определил «логотип» как «контур, который имеет наибольшую площадь». Позже вам понадобятся дополнительные правила, так что удачи.

    import numpy as np
import cv2

im = cv2.imread('contours_1.jpg')
imgray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(imgray,127,255, cv2.THRESH_BINARY_INV)

rect_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
threshed = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, rect_kernel)
cv2.imwrite("contours_1_thres.jpg", threshed)

im2, contours, hierarchy = cv2.findContours(threshed,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

ws = []
hs = []
areas = []
for contour in contours:
    area = cv2.contourArea(contour)
    x, y, w, h = cv2.boundingRect(contour)
    print("w: {}, h: {}, area: {}".format(w, h, area))
    ws.append(w)
    hs.append(h)
    areas.append(area)

max_idx = np.argmax(areas)

cv2.drawContours(im, [contours[max_idx]], -1, (0, 255, 0), 3)
# cv2.drawContours(im, contours, -1, (0, 255, 0), 3)

cv2.imwrite("contours_1_test.jpg", im)

Выводятся следующие изображения: (Обнаруженный логотип находится в зеленом поле)

first image output

second image output

...