Pun*_*t S 14
对于我尝试的实验,分割 hsv 值、调整各个通道然后进行合并的替代方法提供了更好的性能。与循环像素相比,下面的方法对我来说要快很多倍:
(h, s, v) = cv2.split(imghsv)
s = s*satadj
s = np.clip(s,0,255)
imghsv = cv2.merge([h,s,v])
Run Code Online (Sandbox Code Playgroud)
请注意,我已在 BGR2HSV 转换期间将值转换为 float32,以避免饱和转换期间因 uint8(默认)溢出而出现负值:
imghsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV).astype("float32")
Run Code Online (Sandbox Code Playgroud)
并在饱和度调整后将其转换回默认 uint8:
imgrgb = cv2.cvtColor(imghsv.astype("uint8"), cv2.COLOR_HSV2BGR)
Run Code Online (Sandbox Code Playgroud)
Mat img(200, 300, CV_8UC1);
Mat saturated;
double saturation = 10;
double scale = 1;
// what it does here is dst = (uchar) ((double)src*scale+saturation);
img.convertTo(saturated, CV_8UC1, scale, saturation);
Run Code Online (Sandbox Code Playgroud)
编辑
如果饱和度是指HSV图像中的S通道,则需要在三个通道中分割图像split()
,将饱和度校正应用于S通道,然后将它们放在一起merge()
.
归档时间: |
|
查看次数: |
22810 次 |
最近记录: |