import cv2 from matplotlib import pyplot as plt import numpy as np # Функция для поворота изображения на заданный угол def rotate_image(image, angle): (h, w) = image.shape[:2] center = (w // 2, h // 2) # Получаем матрицу поворота M = cv2.getRotationMatrix2D(center, angle, 1.0) # Определяем размеры новой области, чтобы все изображение влезло после поворота cos = np.abs(M[0, 0]) sin = np.abs(M[0, 1]) new_w = int((h * sin) + (w * cos)) new_h = int((h * cos) + (w * sin)) # Регулируем матрицу поворота для нового размера M[0, 2] += (new_w / 2) - center[0] M[1, 2] += (new_h / 2) - center[1] # Поворачиваем изображение return cv2.warpAffine(image, M, (new_w, new_h)) # Функция для построения гистограммы каналов def calculate_and_plot_histogram(image, axs, position, title_prefix): # Разделяем изображение на каналы blue, green, red = cv2.split(image) # Рассчитываем гистограммы для каждого канала hist_blue = cv2.calcHist([blue], [0], None, [256], [0, 256]) hist_green = cv2.calcHist([green], [0], None, [256], [0, 256]) hist_red = cv2.calcHist([red], [0], None, [256], [0, 256]) # Показываем изображение axs[position, 0].imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB)) axs[position, 0].set_title(f'{title_prefix} изображение') axs[position, 0].axis('off') # Рисуем гистограммы для каждого канала axs[position, 1].plot(hist_red, color='red', label='Красный канал') axs[position, 1].plot(hist_green, color='green', label='Зеленый канал') axs[position, 1].plot(hist_blue, color='blue', label='Синий канал') axs[position, 1].set_title(f'{title_prefix} гистограммы') axs[position, 1].set_xlabel('Интенсивность пикселя') axs[position, 1].set_ylabel('Количество пикселей') axs[position, 1].legend() # Загружаем изображение image = cv2.imread('/Users/texnik/Downloads/Новая папка/image1.jpg') # Поворачиваем изображение на 45 градусов rotated_image = rotate_image(image, 45) # Создаем подграфики для исходного и повернутого изображения fig, axs = plt.subplots(2, 2, figsize=(12, 8)) # Строим гистограммы для исходного изображения calculate_and_plot_histogram(image, axs, 0, 'Исходное') # Строим гистограммы для повернутого изображения calculate_and_plot_histogram(rotated_image, axs, 1, 'Повернутое') plt.tight_layout() plt.show()