Spaces:
Running
Running
""" | |
亮度、对比度、锐化、饱和度调整模块 | |
""" | |
import cv2 | |
import numpy as np | |
def adjust_brightness_contrast_sharpen_saturation( | |
image, | |
brightness_factor=0, | |
contrast_factor=0, | |
sharpen_strength=0, | |
saturation_factor=0, | |
): | |
""" | |
调整图像的亮度、对比度、锐度和饱和度。 | |
参数: | |
image (numpy.ndarray): 输入的图像数组。 | |
brightness_factor (float): 亮度调整因子。大于0增加亮度,小于0降低亮度。 | |
contrast_factor (float): 对比度调整因子。大于0增加对比度,小于0降低对比度。 | |
sharpen_strength (float): 锐化强度。 | |
saturation_factor (float): 饱和度调整因子。大于0增加饱和度,小于0降低饱和度。 | |
返回: | |
numpy.ndarray: 调整后的图像。 | |
""" | |
if ( | |
brightness_factor == 0 | |
and contrast_factor == 0 | |
and sharpen_strength == 0 | |
and saturation_factor == 0 | |
): | |
return image.copy() | |
adjusted_image = image.copy() | |
# 调整饱和度 | |
if saturation_factor != 0: | |
adjusted_image = adjust_saturation(adjusted_image, saturation_factor) | |
# 调整亮度和对比度 | |
alpha = 1.0 + (contrast_factor / 100.0) | |
beta = brightness_factor | |
adjusted_image = cv2.convertScaleAbs(adjusted_image, alpha=alpha, beta=beta) | |
# 增强锐化 | |
adjusted_image = sharpen_image(adjusted_image, sharpen_strength) | |
return adjusted_image | |
def adjust_saturation(image, saturation_factor): | |
""" | |
调整图像的饱和度。 | |
参数: | |
image (numpy.ndarray): 输入的图像数组。 | |
saturation_factor (float): 饱和度调整因子。大于0增加饱和度,小于0降低饱和度。 | |
返回: | |
numpy.ndarray: 调整后的图像。 | |
""" | |
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) | |
h, s, v = cv2.split(hsv) | |
s = s.astype(np.float32) | |
s = s + s * (saturation_factor / 100.0) | |
s = np.clip(s, 0, 255).astype(np.uint8) | |
hsv = cv2.merge([h, s, v]) | |
return cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR) | |
def sharpen_image(image, strength=0): | |
""" | |
对图像进行锐化处理。 | |
参数: | |
image (numpy.ndarray): 输入的图像数组。 | |
strength (float): 锐化强度,范围建议为0-5。0表示不进行锐化。 | |
返回: | |
numpy.ndarray: 锐化后的图像。 | |
""" | |
print(f"Sharpen strength: {strength}") | |
if strength == 0: | |
return image.copy() | |
strength = strength * 20 | |
kernel_strength = 1 + (strength / 500) | |
kernel = ( | |
np.array([[-0.5, -0.5, -0.5], [-0.5, 5, -0.5], [-0.5, -0.5, -0.5]]) | |
* kernel_strength | |
) | |
sharpened = cv2.filter2D(image, -1, kernel) | |
sharpened = np.clip(sharpened, 0, 255).astype(np.uint8) | |
alpha = strength / 200 | |
blended = cv2.addWeighted(image, 1 - alpha, sharpened, alpha, 0) | |
return blended | |
# Gradio接口 | |
def base_adjustment(image, brightness, contrast, sharpen, saturation): | |
adjusted = adjust_brightness_contrast_sharpen_saturation( | |
image, brightness, contrast, sharpen, saturation | |
) | |
return adjusted | |
if __name__ == "__main__": | |
import gradio as gr | |
iface = gr.Interface( | |
fn=base_adjustment, | |
inputs=[ | |
gr.Image(label="Input Image", height=400), | |
gr.Slider( | |
minimum=-20, | |
maximum=20, | |
value=0, | |
step=1, | |
label="Brightness", | |
), | |
gr.Slider( | |
minimum=-100, | |
maximum=100, | |
value=0, | |
step=1, | |
label="Contrast", | |
), | |
gr.Slider( | |
minimum=0, | |
maximum=5, | |
value=0, | |
step=1, | |
label="Sharpen", | |
), | |
gr.Slider( | |
minimum=-100, | |
maximum=100, | |
value=0, | |
step=1, | |
label="Saturation", | |
), | |
], | |
outputs=gr.Image(label="Adjusted Image"), | |
title="Image Adjustment", | |
description="Adjust the brightness, contrast, sharpness, and saturation of an image using sliders.", | |
) | |
iface.launch() | |