258 篇文章 1289 订阅

# 【youcans 的 OpenCV 例程300篇】206. Photoshop 色阶调整算法

Photoshop 的色阶调整分为输入色阶调整和输出色阶调整。

• S i n S_{in} ，输入图像的黑场阈值，input shadows
• H i n H_{in} ，输入图像的白场阈值，input hithlight
• M M ，中间调，灰场调节值，midtone

V 1 = { 0 , V i n < S i n 255 , V i n > H i n 255 ∗ ( V i n − S i n ) / ( H i n − S i n ) , e l s e V 2 = 255 ∗ ( V 1 / 255 ) 1 / M \begin{aligned} & V_1 = \begin{cases} 0 &, V_{in}<S_{in} \\ 255 &, V_{in}>H_{in} \\ 255 * {(V_{in}-S_{in})}/{(H_{in}-S_{in})} &, else \end{cases} \\ \\ & V_2 = 255 * (V_1 / 255)^{1/M} \end{aligned}

V o u t = { 0 , V 2 < 0 255 , V 2 > 255 S o u t + ( H o u t − S o u t ) ∗ V 2 ∗ / 255 , e l s e V_{out} = \begin{cases} 0 &, V_{2}<0 \\ 255 &, V_{2}>255 \\ S_{out} + {(H_{out}-S_{out})} * V_2 */255 &, else \end{cases}

### 例程 14.13：Photoshop 色阶调整算法

# 14.13 Photoshop 色阶调整算法
def levelAdjust(img, Sin=0, Hin=255, Mt=1.0, Sout=0, Hout=255):
Sin = min(max(Sin, 0), Hin-2)  # Sin, 黑场阈值, 0<=Sin<Hin
Hin = min(Hin, 255)  # Hin, 白场阈值, Sin<Hin<=255
Mt  = min(max(Mt, 0.01), 9.99)  # Mt, 灰场调节值, 0.01~9.99
Sout = min(max(Sout, 0), Hout-2)  # Sout, 输出黑场阈值, 0<=Sout<Hout
Hout = min(Hout, 255)  # Hout, 输出白场阈值, Sout<Hout<=255

difIn = Hin - Sin
difOut = Hout - Sout
table = np.zeros(256, np.uint16)
for i in range(256):
V1 = min(max(255 * (i-Sin)/difIn,0), 255)  # 输入动态线性拉伸
V2 = 255 * np.power(V1/255, 1/Mt)  # 灰场伽马调节
table[i] = min(max(Sout+difOut*V2/255, 0), 255)  # 输出线性拉伸

imgTone = cv.LUT(img, table)
return imgTone

img = cv.imread("../images/buddha01.png", flags=1)  # 读取彩色
equ1 = levelAdjust(img, 10, 225, 1.0, 10, 245)
equ2 = levelAdjust(img, 10, 225, 1.2, 10, 245)

plt.figure(figsize=(9, 6))
plt.subplot(131), plt.title("origin"), plt.axis('off')
plt.imshow(cv.cvtColor(img, cv.COLOR_BGR2RGB))
plt.subplot(132), plt.title("colorEqu1"), plt.axis('off')
plt.imshow(cv.cvtColor(equ1, cv.COLOR_BGR2RGB))
plt.subplot(133), plt.title("colorEqu2"), plt.axis('off')
plt.imshow(cv.cvtColor(equ2, cv.COLOR_BGR2RGB))
plt.tight_layout()
plt.show()

【本节完】

youcans@xupt 原创作品，转载必须标注原文链接：(https://blog.csdn.net/youcans/article/details/125373625)
Crated：2022-6-18

• 1
点赞
• 5
收藏
• 打赏
• 0
评论
10-01 140
10-22 1044
12-06 439
01-03 4372
08-27 6565
04-28 723
04-27 1万+
10-06 1795
05-26 3057
08-13 491
06-22 588

### “相关推荐”对你有帮助么？

• 非常没帮助
• 没帮助
• 一般
• 有帮助
• 非常有帮助

youcans_

¥2 ¥4 ¥6 ¥10 ¥20

1.余额是钱包充值的虚拟货币，按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载，可以购买VIP、C币套餐、付费专栏及课程。