Advertisement
Botlarakla

Azadov Nadirbek 7 praktika

Oct 23rd, 2024
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.05 KB | Source Code | 0 0
  1. import cv2
  2. from matplotlib import pyplot as plt
  3. import numpy as np
  4.  
  5. # Функция для поворота изображения на заданный угол
  6. def rotate_image(image, angle):
  7.     (h, w) = image.shape[:2]
  8.     center = (w // 2, h // 2)
  9.    
  10.     # Получаем матрицу поворота
  11.     M = cv2.getRotationMatrix2D(center, angle, 1.0)
  12.     # Определяем размеры новой области, чтобы все изображение влезло после поворота
  13.     cos = np.abs(M[0, 0])
  14.     sin = np.abs(M[0, 1])
  15.    
  16.     new_w = int((h * sin) + (w * cos))
  17.     new_h = int((h * cos) + (w * sin))
  18.    
  19.     # Регулируем матрицу поворота для нового размера
  20.     M[0, 2] += (new_w / 2) - center[0]
  21.     M[1, 2] += (new_h / 2) - center[1]
  22.    
  23.     # Поворачиваем изображение
  24.     return cv2.warpAffine(image, M, (new_w, new_h))
  25.  
  26. # Функция для построения гистограммы каналов
  27. def calculate_and_plot_histogram(image, axs, position, title_prefix):
  28.     # Разделяем изображение на каналы
  29.     blue, green, red = cv2.split(image)
  30.    
  31.     # Рассчитываем гистограммы для каждого канала
  32.     hist_blue = cv2.calcHist([blue], [0], None, [256], [0, 256])
  33.     hist_green = cv2.calcHist([green], [0], None, [256], [0, 256])
  34.     hist_red = cv2.calcHist([red], [0], None, [256], [0, 256])
  35.    
  36.     # Показываем изображение
  37.     axs[position, 0].imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
  38.     axs[position, 0].set_title(f'{title_prefix} изображение')
  39.     axs[position, 0].axis('off')
  40.    
  41.     # Рисуем гистограммы для каждого канала
  42.     axs[position, 1].plot(hist_red, color='red', label='Красный канал')
  43.     axs[position, 1].plot(hist_green, color='green', label='Зеленый канал')
  44.     axs[position, 1].plot(hist_blue, color='blue', label='Синий канал')
  45.     axs[position, 1].set_title(f'{title_prefix} гистограммы')
  46.     axs[position, 1].set_xlabel('Интенсивность пикселя')
  47.     axs[position, 1].set_ylabel('Количество пикселей')
  48.     axs[position, 1].legend()
  49.  
  50. # Загружаем изображение
  51. image = cv2.imread('/Users/texnik/Downloads/Новая папка/image1.jpg')
  52.  
  53. # Поворачиваем изображение на 45 градусов
  54. rotated_image = rotate_image(image, 45)
  55.  
  56. # Создаем подграфики для исходного и повернутого изображения
  57. fig, axs = plt.subplots(2, 2, figsize=(12, 8))
  58.  
  59. # Строим гистограммы для исходного изображения
  60. calculate_and_plot_histogram(image, axs, 0, 'Исходное')
  61.  
  62. # Строим гистограммы для повернутого изображения
  63. calculate_and_plot_histogram(rotated_image, axs, 1, 'Повернутое')
  64.  
  65. plt.tight_layout()
  66. plt.show()
Tags: praktika
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement