簡體   English   中英

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

[英]Increase brightness of specific pixels in an image using python

我想增加下圖中紫色的亮度/鮮艷度:

在此處輸入圖片說明

這是調色板

在此處輸入圖片說明

這是我嘗試過的:但這會增加整個圖像的亮度:

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() 為紫色創建蒙版。 然后使用您當前的方法在任何地方修改輸入圖像。 然后使用蒙版將輸入和修改后的圖像組合起來,以便僅顯示與蒙版中白色對應的紫色的增強。

所以這是在 Python/OpenCV 中做到的。

輸入:

在此處輸入圖片說明

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)

結果:

在此處輸入圖片說明

如果您交替查看輸入和輸出,您會發現輸出處處都更亮。

您可以為圖像添加對比度。 無法重用代碼,而是創建一個考慮對比的代碼:

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt

image = cv.imread('image.png')

def increase_brightness(image, alpha, beta):
    # Simple contrast control(alpha)
    # Simple brightness control(betha)

    new_image = np.zeros(image.shape, image.dtype)

    for y in range(image.shape[0]):
        for x in range(image.shape[1]):
            for c in range(image.shape[2]):
                new_image[y,x,c] = np.clip(alpha*image[y,x,c] + beta, 0, 255)

    plt.imsave('img_new.png', new_image)
    return new_image

我測試了以下案例:

increase_brightness(image, 1.0, 4)

舊圖:

在此處輸入代碼

新圖片:

在此處輸入圖片說明

我的解決方案基於此鏈接: https : //docs.opencv.org/3.4/d3/dc1/tutorial_basic_linear_transform.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM