python語言之影像處理:亮度調整演算法
亮度調整演算法說明(完整python程式碼在文末):
本演算法的基本原理就是對畫素點統一進行加上或減去某個調整值,已達到亮度的增強或減弱。包括基於RGB空間R、G、B值的調整和基於HSV空間V值的調整。
1. 基於RGB空間亮度調整演算法:
主要是對RGB空間進行亮度調整。計算出調整係數後,調整手段主要有兩種:
1) 基於當前RGB值大小進行調整,即R、G、B值越大,調整的越大, 例如:當前畫素點為(100,200,50),調整係數1.1,則調整後為(110,220,55);
2) 不考慮RGB值大小的影響,即始終對各個點R、G、B值進行相同的調整,例如:當前畫素點為(100,200,50),調整係數10/255,則調整後為(110,210,60)。
2. 基於HSV空間亮度調整演算法:
主要是對HSV空間的亮度V值進行調整。計算出調整係數後,調整手段主要也有兩種:
1) 基於當前V值大小進行調整,即V值越大,調整的越大,例如:當前畫素點V值為200,調整係數1.1,則調整後為220;
2) 不考慮V值大小的影響,即始終對各個V值進行相同的調整, 例如:當前畫素點V值為200,調整係數10/255,則調整後為210。
完整python程式碼如下:
執行方式:開啟終端介面,在該py檔案目錄下,
執行:python 該檔案.py 圖片路徑 亮度等級(-1~1) 調整方式(0或1,預設1)
例如:python Lightness.py C:\Users\PDD\Desktop\pdd.jpg 0.3 (1)
import cv2
import sys
import numpy as np
import matplotlib.pyplot as plt
"""
基於RGB空間亮度調整演算法:
主要是對RGB空間進行亮度調整。計算出調整係數後,調整手段主要有兩種:
1) 基於當前RGB值大小進行調整,即R、G、B值越大,調整的越大,
例如:當前畫素點為(100,200,50),調整係數1.1,則調整後為(110,220,55);
2) 不考慮RGB值大小的影響,即始終對各個點R、G、B值進行相同的調整,
例如:當前畫素點為(100,200,50),調整係數10/255,則調整後為(110,210,60)。
"""
def RGBAlgorithm(rgb_img, value=0.5, basedOnCurrentValue=True):
img = rgb_img * 1.0
img_out = img
# 基於當前RGB進行調整(RGB*alpha)
if basedOnCurrentValue:
# 增量大於0,指數調整
if value >= 0 :
alpha = 1 - value
alpha = 1/alpha
# 增量小於0,線性調整
else:
alpha = value + 1
img_out[:, :, 0] = img[:, :, 0] * alpha
img_out[:, :, 1] = img[:, :, 1] * alpha
img_out[:, :, 2] = img[:, :, 2] * alpha
# 獨立於當前RGB進行調整(RGB+alpha*255)
else:
alpha = value
img_out[:, :, 0] = img[:, :, 0] + 255.0 * alpha
img_out[:, :, 1] = img[:, :, 1] + 255.0 * alpha
img_out[:, :, 2] = img[:, :, 2] + 255.0 * alpha
img_out = img_out/255.0
# RGB顏色上下限處理(小於0取0,大於1取1)
mask_3 = img_out < 0
mask_4 = img_out > 1
img_out = img_out * (1-mask_3)
img_out = img_out * (1-mask_4) + mask_4
return img_out
"""
基於HSV空間亮度調整演算法:
主要是對HSV空間的亮度V值進行調整。計算出調整係數後,調整手段主要有兩種:
1) 基於當前V值大小進行調整,即V值越大,調整的越大,
例如:當前畫素點V值為200,調整係數1.1,則調整後為220;
2) 不考慮V值大小的影響,即始終對各個V值進行相同的調整,
例如:當前畫素點V值為200,調整係數10/255,則調整後為210。
""" 無錫婦科醫院排行
def HSVAlgorithm(rgb_img, value=0.5, basedOnCurrentValue=True):
hsv_img = cv2.cvtColor(rgb_img, cv2.COLOR_RGB2HSV)
img = hsv_img * 1.0
img_out = img
# 基於當前亮度進行調整(V*alpha)
if basedOnCurrentValue:
# 增量大於0,指數調整
if value >= 0 :
alpha = 1 - value
alpha = 1/alpha
# 增量小於0,線性調整
else:
alpha = value + 1
img_out[:, :, 2] = img[:, :, 2] * alpha
else :
alpha = value
img_out[:, :, 2] = img[:, :, 2] + 255.0 * alpha
# HSV亮度上下限處理(小於0取0,大於1取1)
img_out = img_out/255.0
mask_1 = img_out < 0
mask_2 = img_out > 1
img_out = img_out * (1-mask_1)
img_out = img_out * (1-mask_2) + mask_2
img_out = img_out * 255.0
# HSV轉RGB
img_out = np.round(img_out).astype(np.uint8)
img_out = cv2.cvtColor(img_out, cv2.COLOR_HSV2RGB)
img_out = img_out/255.0
return img_out
path = './resource/fruit.bmp'
value = 0.3 # 範圍-1至1
basedOnCurrentValue = True # 0或者1
# run : python Lightness.py (path) (value) (basedOnCurrentValue)
if __name__ == "__main__":
len = len(sys.argv)
if len >= 2 :
path = sys.argv[1]
if len >= 3 :
value = float(sys.argv[2])
if len >= 4 :
basedOnCurrentValue = bool(int(sys.argv[3]))
img = cv2.imread(path)
img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
img_rgb = RGBAlgorithm(img, value, basedOnCurrentValue)
img_hsv = HSVAlgorithm(img, value, basedOnCurrentValue)
plt.figure("img_original")
plt.imshow(img/255.0)
plt.axis('off')
plt.figure("img_light_rgb")
plt.imshow(img_rgb)
plt.axis('off')
plt.figure("img_light_hsv")
plt.imshow(img_hsv)
plt.axis('off')
plt.show()
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69945560/viewspace-2655410/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 04-OpenCvSharp4調整影像亮度和對比度OpenCV
- Go語言之錯誤處理Go
- C語言之字串處理函式C語言字串函式
- Python影像處理丨5種影像處理特效Python特效
- win10亮度怎麼調_win10如何調整亮度Win10
- Python 影像處理 OpenCV (6):影像的閾值處理PythonOpenCV
- Python 影像處理 OpenCV (7):影像平滑(濾波)處理PythonOpenCV
- Go語言之Goroutine與通道、異常處理Go
- Python影像處理庫——PILPython
- Python 影像處理 OpenCV (15):影像輪廓PythonOpenCV
- Python 影像處理 OpenCV (16):影像直方圖PythonOpenCV直方圖
- Python 影像處理 OpenCV (14):影像金字塔PythonOpenCV
- 影像處理的濾鏡演算法演算法
- Python 影像處理 OpenCV (3):影像屬性、影像感興趣 ROI 區域及通道處理PythonOpenCV
- python 包之 Pillow 影像處理教程Python
- Python 影像處理 OpenCV (1):入門PythonOpenCV
- 影像處理--影像特效特效
- Python 影像處理 OpenCV (2):畫素處理與 Numpy 操作以及 Matplotlib 顯示影像PythonOpenCV
- Python 影像處理 OpenCV (5):影像的幾何變換PythonOpenCV
- webgl 影像處理2---影像畫素處理Web
- Golang與Python:語言之戰GolangPython
- MATLAB影像處理imadjust()函式調節影像的對比度示例Matlab函式
- [Python影像處理] 三十.影像量化及取樣處理萬字詳細總結(推薦)Python
- 影像預處理
- win10亮度無法調整怎麼辦_win10螢幕亮度調節不了如何解決Win10
- 跟我學Python影像處理丨獲取影像屬性、興趣ROI區域及通道處理Python
- 美顏SDK膚色處理與細節調整
- 螢幕亮度調整工具:Lunar Pro for Mac 6.2.7啟用版Mac
- win10螢幕亮度沒反應如何處理_win10電腦螢幕亮度調不了怎麼辦Win10
- Iridient Developer for macRAW影像調整軟體DeveloperMac
- 怎麼調整電腦螢幕顯示亮度 怎麼設定電腦螢幕亮度
- 演算法 | 數字影像處理之「中值濾波」演算法
- Python 影像處理 OpenCV (10):影像處理形態學之頂帽運算與黑帽運算PythonOpenCV
- Python 影像處理 OpenCV (9):影像處理形態學開運算、閉運算以及梯度運算PythonOpenCV梯度
- Python影像處理初探:Pillow庫的基礎使用Python
- Python 計算機視覺(十五)—— 影像特效處理Python計算機視覺特效
- OpenCV(影像NaN處理)OpenCVNaN
- 影像處理案例03