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如何更新包

    python如何更新包

    在本篇文章里小编给大家整理的是关于python更新包的相关知识点内容,有兴趣的朋友们可以参考下。
    2020-06-06
  • Python 对Excel求和、合并居中的操作

    Python 对Excel求和、合并居中的操作

    这篇文章主要介绍了Python 对Excel求和、合并居中的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • 浅谈python脚本设置运行参数的方法

    浅谈python脚本设置运行参数的方法

    今天小编就为大家分享一篇浅谈python脚本设置运行参数的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • pandas 使用apply同时处理两列数据的方法

    pandas 使用apply同时处理两列数据的方法

    下面小编就为大家分享一篇pandas 使用apply同时处理两列数据的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • Python全栈之学习CSS(2)

    Python全栈之学习CSS(2)

    这篇文章主要为大家介绍了Python全栈之CSS,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • 如何解决cmd运行python提示不是内部命令

    如何解决cmd运行python提示不是内部命令

    在本篇文章里小编给大家整理了关于如何解决cmd运行python提示不是内部命令的相关内容,有兴趣的朋友们学习下。
    2020-07-07
  • Python中内置的日志模块logging用法详解

    Python中内置的日志模块logging用法详解

    Python的logging模块提供了记录程序运行情况的日志功能,类似于Apache的log4j,很好很强大,这里我们就来看一下Python中内置的日志模块logging用法详解
    2016-07-07
  • 使用Python三角函数公式计算三角形的夹角案例

    使用Python三角函数公式计算三角形的夹角案例

    这篇文章主要介绍了使用Python三角函数公式计算三角形的夹角案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • django免除csrf校验的方法

    django免除csrf校验的方法

    这篇文章主要介绍了django免除csrf校验的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • 使用Django清空数据库并重新生成

    使用Django清空数据库并重新生成

    这篇文章主要介绍了使用Django清空数据库并重新生成,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04

最新评论