Python调整图像hue值结合ImageEnhance库以实现色调增强
更新时间:2023年09月23日 09:45:50 作者:TracelessLe
这篇文章主要介绍了Python调整图像hue值结合ImageEnhance库以实现色调增强,PIL库中的ImageEnhance类可用于图像增强,可以调节图像的亮度、对比度、色度和锐度,通过RGB到HSV的变换加调整可以对图像的色调进行调整,需要的朋友可以参考下
前言
PIL库中的ImageEnhance类可用于图像增强,可以调节图像的亮度、对比度、色度和锐度。
通过RGB到HSV的变换加调整可以对图像的色调进行调整。 两种方法结合可以达到更大程度的图像色调增强。
调整hue值
__author__ = 'TracelessLe' __website__ = 'https://blog.csdn.net/TracelessLe' import numpy as np from PIL import Image, ImageEnhance filename = 'test.png' pil_img = Image.open(filename).convert('RGB') hue = np.random.randint(0, 360) out = hueChange(pil_img, hue/360.) # 调整hue值 out.save('out.png')
其中 hueChange 方法实现如下:
__author__ = 'TracelessLe' __website__ = 'https://blog.csdn.net/TracelessLe' import numpy as np from PIL import Image def rgb_to_hsv(rgb): # Translated from source of colorsys.rgb_to_hsv # r,g,b should be a numpy arrays with values between 0 and 255 # rgb_to_hsv returns an array of floats between 0.0 and 1.0. rgb = rgb.astype('float') hsv = np.zeros_like(rgb) # in case an RGBA array was passed, just copy the A channel hsv[..., 3:] = rgb[..., 3:] r, g, b = rgb[..., 0], rgb[..., 1], rgb[..., 2] maxc = np.max(rgb[..., :3], axis=-1) minc = np.min(rgb[..., :3], axis=-1) hsv[..., 2] = maxc mask = maxc != minc hsv[mask, 1] = (maxc - minc)[mask] / maxc[mask] rc = np.zeros_like(r) gc = np.zeros_like(g) bc = np.zeros_like(b) rc[mask] = (maxc - r)[mask] / (maxc - minc)[mask] gc[mask] = (maxc - g)[mask] / (maxc - minc)[mask] bc[mask] = (maxc - b)[mask] / (maxc - minc)[mask] hsv[..., 0] = np.select( [r == maxc, g == maxc], [bc - gc, 2.0 + rc - bc], default=4.0 + gc - rc) hsv[..., 0] = (hsv[..., 0] / 6.0) % 1.0 return hsv def hsv_to_rgb(hsv): # Translated from source of colorsys.hsv_to_rgb # h,s should be a numpy arrays with values between 0.0 and 1.0 # v should be a numpy array with values between 0.0 and 255.0 # hsv_to_rgb returns an array of uints between 0 and 255. rgb = np.empty_like(hsv) rgb[..., 3:] = hsv[..., 3:] h, s, v = hsv[..., 0], hsv[..., 1], hsv[..., 2] i = (h * 6.0).astype('uint8') f = (h * 6.0) - i p = v * (1.0 - s) q = v * (1.0 - s * f) t = v * (1.0 - s * (1.0 - f)) i = i % 6 conditions = [s == 0.0, i == 1, i == 2, i == 3, i == 4, i == 5] rgb[..., 0] = np.select(conditions, [v, q, p, p, t, v], default=v) rgb[..., 1] = np.select(conditions, [v, v, v, q, p, p], default=t) rgb[..., 2] = np.select(conditions, [v, p, t, v, v, q], default=p) return rgb.astype('uint8') def hueChange(img, hue): arr = np.array(img) hsv = rgb_to_hsv(arr) hsv[..., 0] = hue rgb = hsv_to_rgb(hsv) return Image.fromarray(rgb, 'RGB')
基于ImageEnhance方法调节图像色度
__author__ = 'TracelessLe' __website__ = 'https://blog.csdn.net/TracelessLe' import random import numpy as np from PIL import Image, ImageEnhance filename = 'test.png' pil_img = Image.open(filename).convert('RGB') enh_col = ImageEnhance.Color(pil_img) factor = random.random() * 1.0 + 0.5 out = enh_col.enhance(factor) out.save('out.png')
合并操作
__author__ = 'TracelessLe' __website__ = 'https://blog.csdn.net/TracelessLe' import random import numpy as np from PIL import Image, ImageEnhance def rgb_to_hsv(rgb): # Translated from source of colorsys.rgb_to_hsv # r,g,b should be a numpy arrays with values between 0 and 255 # rgb_to_hsv returns an array of floats between 0.0 and 1.0. rgb = rgb.astype('float') hsv = np.zeros_like(rgb) # in case an RGBA array was passed, just copy the A channel hsv[..., 3:] = rgb[..., 3:] r, g, b = rgb[..., 0], rgb[..., 1], rgb[..., 2] maxc = np.max(rgb[..., :3], axis=-1) minc = np.min(rgb[..., :3], axis=-1) hsv[..., 2] = maxc mask = maxc != minc hsv[mask, 1] = (maxc - minc)[mask] / maxc[mask] rc = np.zeros_like(r) gc = np.zeros_like(g) bc = np.zeros_like(b) rc[mask] = (maxc - r)[mask] / (maxc - minc)[mask] gc[mask] = (maxc - g)[mask] / (maxc - minc)[mask] bc[mask] = (maxc - b)[mask] / (maxc - minc)[mask] hsv[..., 0] = np.select( [r == maxc, g == maxc], [bc - gc, 2.0 + rc - bc], default=4.0 + gc - rc) hsv[..., 0] = (hsv[..., 0] / 6.0) % 1.0 return hsv def hsv_to_rgb(hsv): # Translated from source of colorsys.hsv_to_rgb # h,s should be a numpy arrays with values between 0.0 and 1.0 # v should be a numpy array with values between 0.0 and 255.0 # hsv_to_rgb returns an array of uints between 0 and 255. rgb = np.empty_like(hsv) rgb[..., 3:] = hsv[..., 3:] h, s, v = hsv[..., 0], hsv[..., 1], hsv[..., 2] i = (h * 6.0).astype('uint8') f = (h * 6.0) - i p = v * (1.0 - s) q = v * (1.0 - s * f) t = v * (1.0 - s * (1.0 - f)) i = i % 6 conditions = [s == 0.0, i == 1, i == 2, i == 3, i == 4, i == 5] rgb[..., 0] = np.select(conditions, [v, q, p, p, t, v], default=v) rgb[..., 1] = np.select(conditions, [v, v, v, q, p, p], default=t) rgb[..., 2] = np.select(conditions, [v, p, t, v, v, q], default=p) return rgb.astype('uint8') def hueChange(img, hue): arr = np.array(img) hsv = rgb_to_hsv(arr) hsv[..., 0] = hue rgb = hsv_to_rgb(hsv) return Image.fromarray(rgb, 'RGB') if __name__ == "__main__": filename = 'test.png' pil_img = Image.open(filename).convert('RGB') hue = np.random.randint(0, 360) pil_img2 = hueChange(pil_img, hue/360.) enh_col = ImageEnhance.Color(pil_img2) factor = random.random() * 1.0 + 0.5 out = enh_col.enhance(factor) out.save('out.png')
到此这篇关于Python调整图像hue值结合ImageEnhance库以实现色调增强的文章就介绍到这了,更多相关ImageEnhance库实现色调增强内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
一篇教程教你学会Python进制转换(十进制转二进制、八进制、十六进制)
计算机中只有1和0,所以就导致很多时候需要进制转换,本文介绍了Python进制转换,十进制转二进制,十进制转八进制,十进制转十六进制,有兴趣的可以了解一下2021-05-05windows11环境安装django项目GNU gettext工具的步骤
Django 框架具有很好的 I18N 和 L10N 的支持,其实现是基于 GNU 的 gettext,本文主要介绍了windows11环境安装django项目GNU gettext工具的步骤,具有一定的参考价值,感兴趣的可以了解一下2024-04-04Python 安装 virturalenv 虚拟环境的教程详解
这篇文章主要介绍了Python 安装 virturalenv 虚拟环境的教程,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下2020-02-02
最新评论