Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement