Advertisement
denees_k

Untitled

Jan 12th, 2024
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.19 KB | None | 0 0
  1. import cv2
  2. import numpy as np
  3. import xml.etree.ElementTree as ET
  4.  
  5.  
  6. # Функция для извлечения настроек из XMP файла
  7. def extract_xmp_settings(xmp_data):
  8.     settings = {}
  9.     root = ET.fromstring(xmp_data)
  10.     ns = {'crs': 'http://ns.adobe.com/camera-raw-settings/1.0/'}
  11.  
  12.     for elem in root.findall('.//crs:*', ns):
  13.         key = elem.tag.split('}')[-1]
  14.         value = elem.text.strip()  # Удаление пробелов и переносов строк
  15.  
  16.         if value:
  17.             try:
  18.                 # Попытка преобразовать значение в float или int
  19.                 settings[key] = float(value) if '.' in value else int(value)
  20.             except ValueError:
  21.                 # Обработка исключения, если преобразование не удалось
  22.                 print(f"Не удалось преобразовать значение '{value}' для настройки '{key}'")
  23.  
  24.     return settings
  25.  
  26.  
  27. # Функция для применения настроек к изображению
  28. def apply_adjustments(image, settings):
  29.     if 'Exposure2012' in settings:
  30.         exposure = settings['Exposure2012']
  31.         image = cv2.add(image, np.array([exposure * 255]).astype(np.uint8))
  32.  
  33.     if 'Contrast2012' in settings:
  34.         contrast = settings['Contrast2012']
  35.         image = cv2.convertScaleAbs(image, alpha=1 + contrast / 100)
  36.  
  37.     if 'Highlights2012' in settings:
  38.         highlights = settings['Highlights2012']
  39.         image = apply_highlights_adjustment(image, highlights)
  40.  
  41.     if 'Shadows2012' in settings:
  42.         shadows = settings['Shadows2012']
  43.         image = apply_shadows_adjustment(image, shadows)
  44.  
  45.     if 'Temperature' in settings:
  46.         temperature = settings['Temperature']
  47.         image = apply_temperature_adjustment(image, temperature)
  48.  
  49.     if 'Saturation' in settings:
  50.         saturation = settings['Saturation']
  51.         image = apply_saturation_adjustment(image, saturation)
  52.  
  53.     if 'Texture' in settings:
  54.         texture = settings['Texture']
  55.         image = apply_texture_adjustment(image, texture)
  56.  
  57.     if 'Dehaze' in settings:
  58.         # Применение настройки устранения тумана
  59.         dehaze = settings['Dehaze']
  60.         image = apply_dehaze_adjustment(image, dehaze)
  61.  
  62.     if 'Vibrance' in settings:
  63.         # Применение настройки вибрантности
  64.         vibrance = settings['Vibrance']
  65.         image = apply_vibrance_adjustment(image, vibrance)
  66.  
  67.     return image
  68.  
  69.  
  70. def apply_vibrance_adjustment(image, vibrance):
  71.     hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
  72.     h, s, v = cv2.split(hsv_image)
  73.  
  74.     increase_function = np.vectorize(lambda x: x + (1 - x / 255.0) * vibrance)
  75.     s = increase_function(s).clip(0, 255).astype(np.uint8)
  76.  
  77.     final_hsv = cv2.merge((h, s, v))
  78.     vibrant_image = cv2.cvtColor(final_hsv, cv2.COLOR_HSV2BGR)
  79.  
  80.     return vibrant_image
  81.  
  82.  
  83. def apply_dehaze_adjustment(image, dehaze):
  84.     # Увеличение контраста
  85.     contrast_enhanced = cv2.convertScaleAbs(image, alpha=1.0 + dehaze / 100)
  86.  
  87.     # Уменьшение серого оттенка (простая коррекция цвета)
  88.     # Можно настроить коэффициенты для более точной коррекции
  89.     gray_world = np.mean(contrast_enhanced, axis=(0, 1))
  90.     gray_world_correction = contrast_enhanced * (gray_world / 255.0)
  91.     corrected_image = np.clip(gray_world_correction, 0, 255).astype(np.uint8)
  92.  
  93.     return corrected_image
  94.  
  95.  
  96. def apply_saturation_adjustment(image, saturation):
  97.     # Реализация применения насыщенности
  98.     hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
  99.     h, s, v = cv2.split(hsv)
  100.     s = cv2.convertScaleAbs(s, alpha=1 + saturation / 100)
  101.     final_hsv = cv2.merge((h, s, v))
  102.     return cv2.cvtColor(final_hsv, cv2.COLOR_HSV2BGR)
  103.  
  104.  
  105. def apply_highlights_adjustment(image, highlights):
  106.     hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
  107.     h, s, v = cv2.split(hsv)
  108.     highlight_mask = cv2.inRange(v, 150, 255)
  109.     v = cv2.add(v, np.array([highlights], dtype=np.uint8), mask=highlight_mask)
  110.     final_hsv = cv2.merge((h, s, v))
  111.     return cv2.cvtColor(final_hsv, cv2.COLOR_HSV2BGR)
  112.  
  113.  
  114. def apply_shadows_adjustment(image, shadows):
  115.     hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
  116.     h, s, v = cv2.split(hsv)
  117.     shadows_mask = cv2.inRange(v, 0, 105)
  118.     v = cv2.add(v, np.array([shadows], dtype=np.uint8), mask=shadows_mask)
  119.     final_hsv = cv2.merge((h, s, v))
  120.     return cv2.cvtColor(final_hsv, cv2.COLOR_HSV2BGR)
  121.  
  122.  
  123. def apply_temperature_adjustment(image, temperature):
  124.     adjustment = (temperature - 5000) / 10000.0
  125.     b, g, r = cv2.split(image)
  126.     if adjustment > 0:
  127.         r = cv2.addWeighted(r, 1.0 + adjustment, r, 0, 0)
  128.     else:
  129.         b = cv2.addWeighted(b, 1.0 - adjustment, b, 0, 0)
  130.     return cv2.merge((b, g, r))
  131.  
  132.  
  133. def apply_saturation_adjustment(image, saturation):
  134.     hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
  135.     h, s, v = cv2.split(hsv)
  136.     s = cv2.convertScaleAbs(s, alpha=1 + saturation / 100)
  137.     final_hsv = cv2.merge((h, s, v))
  138.     return cv2.cvtColor(final_hsv, cv2.COLOR_HSV2BGR)
  139.  
  140.  
  141. def apply_texture_adjustment(image, texture):
  142.     # Базовая реализация эффекта текстуры
  143.     kernel_size = 3  # Размер ядра может быть настроен
  144.     blurred = cv2.GaussianBlur(image, (kernel_size, kernel_size), 0)
  145.     texture_effect = cv2.addWeighted(image, 1.5, blurred, -0.5, 0)
  146.     texture_effect = cv2.addWeighted(texture_effect, 1 + texture / 100, image, 0, 0)
  147.     return texture_effect
  148.  
  149. # Чтение XMP файла
  150. with open('settings/@danillainspiredpresetsbyiqbaal.xmp', 'r') as file:
  151.     xmp_content = file.read()
  152.  
  153. # Извлечение настроек из XMP
  154. xmp_settings = extract_xmp_settings(xmp_content)
  155.  
  156. # Чтение изображения
  157. image = cv2.imread('example.jpg')
  158.  
  159. # Применение настроек
  160. processed_image = apply_adjustments(image, xmp_settings)
  161.  
  162. # Сохранение результата
  163. cv2.imwrite('processed_example.jpg', processed_image)
  164.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement