Untitled

mail@pastecode.io avatar
unknown
python
a month ago
2.2 kB
1
Indexable
Never
import cv2
import numpy as np
from PIL import Image as PILImage
from pdf2image import convert_from_path

def correct_skew(image):
    # Преобразование в оттенки серого
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    # Обнаружение границ
    edges = cv2.Canny(gray, 50, 150, apertureSize=3)
    # Использование преобразования Хафа для обнаружения линий
    lines = cv2.HoughLines(edges, 1, np.pi/180, 100)
    if lines is not None:
        angles = []
        for rho, theta in lines[:, 0]:
            angle = (theta - np.pi/2) * 180/np.pi
            angles.append(angle)
        # Усреднение углов
        median_angle = np.median(angles)
        # Поворот изображения для коррекции наклона
        (h, w) = image.shape[:2]
        center = (w // 2, h // 2)
        M = cv2.getRotationMatrix2D(center, median_angle, 1.0)
        corrected_img = cv2.warpAffine(image, M, (w, h),
                                       flags=cv2.INTER_CUBIC,
                                       borderMode=cv2.BORDER_REPLICATE)
        return corrected_img
    else:
        return image

# Текущий путь
cur_path = pathlib.Path().resolve()

# Путь к PDF файлу
name = 'Доп_соглашение_о_мин_объеме_ТМС_от_01_10_2022'
img_path = f'{cur_path}/{name}.pdf'

# Конвертация PDF в изображения
pages = convert_from_path(img_path)

# Обработка первой страницы
if pages:
    page_image = np.array(pages[0])  # Преобразование PIL Image в NumPy array
    corrected_image = correct_skew(page_image)  # Коррекция наклона

    # Сохранение откорректированной первой страницы
    corrected_image_pil = PILImage.fromarray(corrected_image)
    corrected_image_pil.save(f'{name}_1st_page_corrected.jpg', 'JPEG')

    # ... Продолжение обработки изображения для извлечения таблиц и дальнейшего анализа ...
Leave a Comment