python - 使用python增加图像中特定像素的亮度

标签 python image numpy opencv

我想增加下图中紫色的亮度/鲜艳度:

enter image description here

这是调色板

enter image description here

这是我尝试过的:但这会增加整个图像的亮度:

def increase_brightness(img, value=20):
    hsv = cv2.cvtColor(img, cv2.COLOR_RGB2HSV)
    h, s, v = cv2.split(hsv)

    lim = 255 - value
    v[v > lim] = 255
    v[v <= lim] += value

    final_hsv = cv2.merge((h, s, v))
    img = cv2.cvtColor(final_hsv, cv2.COLOR_HSV2BGR)
    plt.imsave('img_new.png', img)

    return img

如何创建一个蒙版来仅修改输入中与紫色对应的像素的亮度?

最佳答案

请注意,您已将图像从 RGB(到 HSV)转换,并且需要将其从 BGR(到 HSV)转换。

如果您只想增加紫色的亮度,则使用 cv2.inRange() 为紫色创建蒙版。然后使用您当前的方法在任何地方修改输入图像。然后使用 mask 将输入图像和修改后的图像结合起来,以便仅显示与 mask 中的白色对应的紫色的增强。

所以这是在 Python/OpenCV 中做的一个。

输入:

enter image description here

import cv2
import numpy as np

# read image
img = cv2.imread('purple.png')

# set value
value = 20

# convert image to hsv colorspace
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
h, s, v = cv2.split(hsv)

# create mask on purple color and also its inverted mask
low_range = (80,160,50)
high_range = (150,230,120)
mask = cv2.inRange(hsv,low_range,high_range)
inv_mask = cv2.bitwise_not(mask)
mask = cv2.merge([mask,mask,mask])
inv_mask = cv2.merge([inv_mask,inv_mask,inv_mask])

# enhance the value channel of the hsv image
lim = 255 - value
v[v > lim] = 255
v[v <= lim] += value

# convert it back to BGR colors
final_hsv = cv2.merge((h, s, v))
bgr = cv2.cvtColor(final_hsv, cv2.COLOR_HSV2BGR)

# use bit_wise_and and its inverse to combine the original and enhanced versions
bgr = cv2.bitwise_and(bgr,mask)
img = cv2.bitwise_and(img,inv_mask)
result = cv2.add(bgr,img)

# display IN and OUT images
cv2.imshow('IMAGE', img)
cv2.imshow('HSV', hsv)
cv2.imshow('MASK', mask)
cv2.imshow('RESULT', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

# save output image
cv2.imwrite('purple_enhanced.png', result)

结果:

enter image description here

如果您交替查看输入和输出,您会发现输出处处都更亮。

关于python - 使用python增加图像中特定像素的亮度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60357469/

相关文章:

node.js - react : how to load image outside src and public folders

python - 周期数据直方图的统计

python - 使用 FastCGI 将 Windows 身份验证上下文从 IIS 传递到 Python

javascript - d3 onerror 默认图像,带有 html 工具提示标签

python - ImportError : No module named flask. ext.mysql

c++ - boost:python 传递一个指向指针的指针作为参数

python - sympy lambdify 运行时警告 : invalid value encountered in double_scalars

python - 如何计算python中线上两点之间的距离

python - 根据满足所有行的条件增加几行的值

python - python 可以同时使用相对导入和绝对导入吗?