问题:在ps中调整好HSB后,cv2如何使用HSV复现?
前置知识:
ps 中 H :-180~180 S: -100~100 B: -100~100
cv2 中 H :0~180 S : 0~255 V:0~255
解决:(调节HSV参数时发现的规律)
H部分:记a = ps 中的 H // 2,b=180-a。
则 cv2中 H 小于100的部分 +a ,cv2 中 H 大于100的部分 -b
举个例子:ps的H=125,则a=62,b=118,H中小于100的部分+62,小于100的部分+118
S部分:(此部分仅猜测,我直接拉满了)
百分比关系 记 a = ps中的 S / 100,
则 cv2 中 S 增加 a*S
举个例子:ps的S=10 cv2 中S=200,则a=0.1 ,增加0.1*200=20,最后等于220
V部分:呈 5 倍 关系,ps 中 V * 5 等于 cv2 中 V
举个例子:ps中V=10 则cv2 中 设置 V=50
代码部分:
import os,cv2
import matplotlib.pyplot as plt
import numpy as np
def adjust_hue_saturation(img, hue_shift, saturation_shift, lightness_shift):
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
h, s, v = cv2.split(hsv_img)
hue_shift = hue_shift//2
add1 = (h < 100)*(hue_shift)
add2 = (h > 100)*(180-hue_shift)
h = h + add1
h = h - add2
h = np.clip(h, 0, 180).astype(np.uint8)
# 这里我直接加了奥
s = cv2.add(s, saturation_shift)
s = np.clip(s, 0, 255).astype(np.uint8)
v = cv2.add(v, lightness_shift * 5)
v = np.clip(v, 0, 255).astype(np.uint8)
adjusted_hsv = cv2.merge([h, s, v])
adjusted_img = cv2.cvtColor(adjusted_hsv, cv2.COLOR_HSV2BGR)
return adjusted_img