最近做一个分析图片色块的脚本,使用了opencv的自动色阶,感觉非常难用,针对不同图片得出的结果差强人意,然后发现ps手动调整色阶输出非常稳定,然后根据这两篇文章就有了这个函数。
本文章>>python实现简单的ps色阶调整过程_GhostRiderQin的博客-CSDN博客_python 色阶调整>>https://blog.csdn.net/maozefa/article/details/4397106
import numpy as np
import cv2
# 读取图像
img = cv2.imread('4-1.png',3) # 文件名不能是中文
# 固定色阶
def color_scale_display(img, Shadow=0, Highlight=255, Midtones=1):
'''
用于图像预处理,模拟ps的色阶调整
img:传入的图片
Highlight:白场(Shadow-255)
Shadow:黑场(0-Highlight)
Midtones:灰场(9.99-0.01)
0 <= Shadow < Highlight <= 255
返回一张图片
'''
if Highlight > 255:
Highlight = 255
if Shadow < 0:
Shadow = 0
if Shadow >= Highlight:
Shadow = Highlight - 2
if Midtones > 9.99:
Midtones = 9.99
if Midtones < 0.01:
Midtones = 0.01
# 转类型
img = np.array(img, dtype=np.float16)
# 计算白场黑场离差
Diff = Highlight - Shadow
img = img - Shadow
img[img < 0] = 0
img = (img/Diff)**(1/Midtones)*255
img[img > 255] = 255
# 转类型
img = np.array(img, dtype=np.uint8)
return img
# 输出显示
equ = color_scale_display(img, 0, 170, 1.53)
res = np.hstack((img,equ)) # 图像列拼接(用于显示)
cv2.imshow('res',res)
cv2.waitKey(0)
cv2.destroyAllWindows()