import cv2 import numpy as np def preprocess_russian_plate(image): """ Улучшенная предобработка для российских номеров ВНИМАНИЕ: Отключена по умолчанию, т.к. может ухудшить качество """ # Конвертация в grayscale если цветное if len(image.shape) == 3: gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) else: gray = image # Увеличение резкости kernel_sharpen = np.array([ [-1, -1, -1], [-1, 9, -1], [-1, -1, -1] ]) sharpened = cv2.filter2D(gray, -1, kernel_sharpen) # CLAHE для выравнивания гистограммы clahe = cv2.createCLAHE(clipLimit=2.5, tileGridSize=(8, 8)) enhanced = clahe.apply(sharpened) # Увеличение контраста и яркости alpha = 1.3 # Контраст beta = 10 # Яркость adjusted = cv2.convertScaleAbs(enhanced, alpha=alpha, beta=beta) # Бинаризация Otsu _, binary = cv2.threshold(adjusted, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) # Морфологическая операция для очистки шума kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (2, 2)) morph = cv2.morphologyEx(binary, cv2.MORPH_CLOSE, kernel) # Инверсия если нужно (фон должен быть темным) if np.mean(morph) > 127: morph = cv2.bitwise_not(morph) return morph