Untitled

mail@pastecode.io avatar
unknown
plain_text
a month ago
1.3 kB
1
Indexable
Never

def correct_skew(image):
    # Преобразование в оттенки серого
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    # Обнаружение границ с помощью адаптивного метода
    edges = cv2.Canny(gray, 100, 200, apertureSize=3)
    # Использование преобразования Хафа для обнаружения линий
    lines = cv2.HoughLines(edges, 1, np.pi/180, 150)
    if lines is not None:
        angles = []
        for rho, theta in lines[:, 0]:
            angle = np.degrees(theta) - 90
            if angle < -45:
                angle = 90 + angle
            if -45 <= angle <= 45:
                angles.append(angle)
        # Усреднение углов
        if len(angles) > 0:
            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
    return image
Leave a Comment