Как извлечь строки из таблицы и создать черно-белую таблицу, содержащую только строки таблицы

#python #opencv

Вопрос:

У меня есть изображение, содержащее таблицу: введите описание изображения здесья использовал приведенный ниже код, чтобы удалить горизонтальные и вертикальные линии и создать изображение только с линией таблицы

 import cv2 as cv
import numpy as np

img = cv.imread('1.jpg')
cv.imshow('Original', img)

gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
gray = cv.bitwise_not(gray)
bw = cv.adaptiveThreshold(gray, 255, cv.ADAPTIVE_THRESH_MEAN_C, cv.THRESH_BINARY, 15, -2)

# Create the images that will use to extract the vertical lines
vertical = np.copy(bw)
horizontal = np.copy(bw)

# Specify size on horizontal axis
cols = horizontal.shape[1]
horizontal_size = cols / 10
horizontal_size=int(horizontal_size)

# Create structure element for extracting horizontal lines through morphology operations
horizontalStructure = cv.getStructuringElement(cv.MORPH_RECT, (horizontal_size, 1))

horizontal = cv.erode(horizontal, horizontalStructure)
horizontal = cv.dilate(horizontal, horizontalStructure) 
# horizontal = cv.dilate(horizontal, (3, 3), iterations=1)

# Specify size on vertical axis
rows = vertical.shape[0]
verticalsize = rows / 10
verticalsize = int(verticalsize)

# Create structure element for extracting vertical lines through morphology operations
verticalStructure = cv.getStructuringElement(cv.MORPH_RECT, (1, verticalsize))

# Apply morphology operations
vertical = cv.erode(vertical, verticalStructure)
vertical = cv.dilate(vertical, verticalStructure)
# vertical = cv.dilate(vertical, (3, 3), iterations=1)

ret, thresh_v = cv.threshold(vertical, 127, 255, cv.THRESH_BINARY)
# cv.imshow('thresh vertical', thresh_v)

ret, thresh_h = cv.threshold(horizontal, 127, 255, cv.THRESH_BINARY)
# cv.imshow('thresh horizontal', thresh_h)

table_lines = cv.bitwise_or(thresh_h, thresh_v)
cv.imshow('table lines', table_lines)

cv.waitKey(0)
 

Это и есть результат:
введите описание изображения здесь
Это изображение грязное. Есть ли какой-либо способ обработать его, чтобы создать полную таблицу, в которой видны только строки на исходном изображении?

Ответ №1:

Вы должны быть в состоянии улучшить свои результаты, используя преобразования линий Хафа: https://docs.opencv.org/4.5.3/d9/db0/tutorial_hough_lines.html. Я сомневаюсь, что вам удастся восстановить всю таблицу целиком, потому что контраст с правой стороны очень низкий.

Комментарии:

1. существует ли какой-либо метод для игры с контрастом изображения?