Сейчас я работаю над проектом, который предполагает обработку изображений таблиц без границ. Моя цель — добавить линии сетки в эти таблицы с помощью OpenCV в Python. Я наткнулся на решение Stack Overflow (это), которое показалось многообещающим, но, к сожалению, для моего изображения оно работает не так, как ожидалось. Код, которому я следовал -
импортировать cv2 импортировать numpy как np # читаем ввод img = cv2.imread('/content/sample_data/Untitled.png') хх, ву = img.shape[:2] # конвертируем в оттенки серого серый = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # порог на белом порог = cv2.threshold(серый, 220, 255, cv2.THRESH_BINARY)[1] # среднее серое изображение в одной строке строка = cv2.resize(thresh, (ww, 1), интерполяция = cv2.INTER_AREA) # порог на белом thresh1 = cv2.threshold(строка, 254, 255, cv2.THRESH_BINARY)[1] # применить небольшое количество морфологии для объединения точки со столбцом текста ядро = cv2.getStructuringElement(cv2.MORPH_RECT, (5,1)) thresh1 = cv2.morphologyEx(thresh1, cv2.MORPH_OPEN, ядро) # получаем контуры контуры = cv2.findContours(thresh1, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) контуры = контуры[0] если len(контуры) == 2 иначе контуры[1] результат = img.copy() результат1 = img.copy() для центра в контурах: x, y, w, h = cv2.boundingRect(cntr) хцентр = х + ш // 2 cv2.line(result1, (xcenter,0), (xcenter, hh-1), (0, 0, 0), 1) cv2.line(результат, (xcenter,0), (xcenter, чч-1), (0, 0, 0), 1) # среднее серое изображение в один столбец столбец = cv2.resize(thresh, (1, чч), интерполяция = cv2.INTER_AREA) # порог на белом thresh2 = cv2.threshold(столбец, 254, 255, cv2.THRESH_BINARY)[1] # получаем контуры контуры = cv2.findContours(thresh2, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) контуры = контуры[0] если len(контуры) == 2 иначе контуры[1] результат2 = img.copy() для центра в контурах: x, y, w, h = cv2.boundingRect(cntr) ycenter = y + h // 2 cv2.line(result2, (0, ycenter), (ww-1, ycenter), (0, 0, 0), 1) cv2.line(результат, (0, ycenter), (ww-1, ycenter), (0, 0, 0), 1) # сохранить результаты cv2.imwrite('table4_threshold.png', thresh) cv2.imwrite('table4_column_lines.png', result1) cv2.imwrite('table4_row_lines.png', result2) cv2.imwrite('table4_column_and_row_lines.png', результат) Входное изображение:

Ожидаемый результат:

Фактический результат:

Кто-нибудь сталкивался с подобной проблемой при работе с таблицами без полей и OpenCV?