#python-3.x #opencv #image-processing #computer-vision #graphical-logo
#python-3.x #opencv #обработка изображений #компьютерное зрение #графический интерфейс-логотип
Вопрос:
Я пытаюсь обнаружить логотип в счетах. Хотя я могу получить некоторые результаты, но их недостаточно для обработки. При обнаружении логотипов также обнаруживается нежелательный текст. Следующее взято из фактического счета: —Исходное изображение
и следующие результаты я получаю изображение после операций
Я использую следующий код, который я написал:-
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)
Не могли бы вы, пожалуйста, помочь мне, какие изменения я должен внести, чтобы удалить шум с моего документированного изображения. Я новичок в компьютерном зрении
Еще несколько примеров: — Оригинальный документ Результат, который я получаю: — Результат после операций над документом
Комментарии:
1. Логотип на изображениях всегда находится в правом верхнем углу?
2. Нет, это может быть где угодно, нет фиксированного местоположения.
3. прежде всего, вы должны определить, что делает логотип логотипом. это очень сложная проблема. если вы знаете, какие логотипы ищете, это не имеет большого значения. В противном случае я бы даже не пытался.
4. Мой документ состоит из всех трех типов: символьных, словесных знаков и комбинационных. Любой подход, который вы можете предложить?
Ответ №1:
Привет, Мохд Анас Кхан.
Ваш подход к определению логотипа слишком прост, поэтому он не может работать. Если вам нужен подход на уровне продукта, используйте машинное обучение или глубокое обучение. Если вам нужны просто игрушки, то должен сработать простой поисковик countours с фиксированными правилами.
Например, в следующем подходе я определил «логотип» как «контур, который имеет наибольшую площадь». Позже вам понадобятся дополнительные правила, так что удачи.
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)
Выходные изображения следующие: (Обнаруженный логотип заключен в зеленую рамку)
Комментарии:
1. Спасибо, что ответили на мой вопрос. Да, я пробовал несколько вещей с контурами, большинство из них работают, но все же я не думаю, что этот подход подходит для уровня продукта. Я планирую начать работать с глубоким обучением, но проблема в данных, можете ли вы подсказать, как я могу создать правильный набор данных для обнаружения логотипов в документах?
2. я не знаю масштабов вашей проблемы, поэтому не могу сказать вам, как создать правильный набор данных. Но, судя по двум изображениям, я думаю, что небольшого набора данных с несколькими сотнями образцов может быть достаточно. Вы можете взять образец из Google image search или flickr.
3. У меня есть счета разных форматов. Я пытаюсь распознать логотип в документе. Какой набор данных и какой подход мне следует использовать? Я не могу найти ни одного правильно помеченного набора данных.
4. У меня нет подробной информации о ваших данных, поэтому я не могу сказать, какой подход хорош, а какой плох. Что касается набора данных для обучения, по моему опыту, если доступен какой-то подобный набор данных, вам повезло. Если нет какого-либо подобного набора данных, вы должны создать его самостоятельно.