Я пытаюсь удалить черные линии, окружающие текст, если они есть.Моя цель - просто получить достаточно части изображения, чтобы извлечь из него каждый символ.Дополнительные черные линии - это шум, когда я пытаюсь извлечь символы.
Я пытался использовать заливку в opencv, но изображение содержит несколько белых пикселей, прежде чем черная линия начинается в верхнем левом углу.Так что это не было плодотворным.Я попытался обрезать с помощью поиска контуров, но даже это не работает.Изображение выглядит следующим образом:
![Original Image](https://i.stack.imgur.com/MgPg8.jpg)
import cv2
import numpy as np
img = cv2.imread('./Cropped/22.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
_,thresh = cv2.threshold(gray,1,255,cv2.THRESH_BINARY)
contours,hierarchy = cv2.findContours(thresh,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
cnt = contours[0]
x,y,w,h = cv2.boundingRect(cnt)
crop = img[y:y+h,x:x+w]
cv2.imshow('Image',img)
cv2.imshow('Cropped Image',crop)
cv2.waitKey(0)
с использованием заливки
img = cv2.imread('./Cropped/22.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# threshold the gray image to binarize, and negate it
gray = cv2.bitwise_not(gray)
w = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, \
cv2.THRESH_BINARY, 15, -2)
# find external contours of all shapes
contours,h = cv2.findContours(bw, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
# create a mask for floodfill function, see documentation
h,w,_ = img.shape
mask = np.zeros((h+2,w+2), np.uint8)
# determine which contour belongs to a square or rectangle
for cnt in contours:
poly = cv2.approxPolyDP(cnt, 0.02*cv2.arcLength(cnt,True),True)
if len(poly) == 4:
# if the contour has 4 vertices then floodfill that contour with black color
cnt = np.vstack(cnt).squeeze()
_,binary,_,_ = cv2.floodFill(bw, mask, tuple(cnt[0]), 0)
# convert image back to original color
binary = cv2.bitwise_not(binary)
cv2.imshow('Image', binary)
cv2.waitKey(0)
cv2.destroyAllWindows()
Результаты в обоих случаях следующие:
![Cropped Image](https://i.stack.imgur.com/nBjQh.jpg)
Но, похоже, никаких изменений нет и
![Using floodfill](https://i.stack.imgur.com/eXUHe.jpg)
, который не удаляет никаких границ.Идеи обоих кодов были получены из ответов на переполнение стека на похожие вопросы.
EDIT
Я подошел к решению, как упомянуто в комментарии @rayryeng.Однако, когда я ввожу обрезанное изображение для извлечения чисел, я получаю эти изображения и неверный результат.Я думаю, что некоторые шумные пиксели не удаляются.Это исходное изображение Исходное изображение .Изображение с пороговым значением Изображение с пороговым значением .Извлеченные контуры имеют следующий вид: Первый контур , Второй контур , Третий контур , Четвертый контур .Если бы это было обобщенное решение, было бы здорово.