一杯清酒邀明月
天下本无事,庸人扰之而烦耳。
posts - 3121,comments - 209,views - 576万

调整色相饱和度

Photoshop 的色相/饱和度调整,可以对全图、红、黄、绿、青、蓝、洋红六个通道进行设置。

每个通道可设置: 色相(hue),  饱和度(satuation), 明度(Lightness)三个调整值。

(一)颜色空间 (Color Space)

颜色空间也称彩色模型(又称彩色空间).  常用颜色空间有:RGB, HSL,  CYMK,  Lab等。

对于RGB图像,所谓色相/饱和度调整,就是把 RGB 转为 HSL, 再对色相(H),  饱和度(S), 明度(L)进行调整,然后再转回RGB.

(二)OpenCV代码实现

1,我用OpenCV 编写了多个 颜色空间转换函数, 在源文件 ColorSpace.hpp,  ColorSpace.cpp中

2,我用OpenCV 编写了一个 HSL类,实现色相/饱和度调整。在源文件 ColorSpace.hpp,  ColorSpace.cpp中

3, 使用方法: HSL类有一个属性channels[7], 定义了7个颜色通道。每个通道有hue, saturation, brightness三个值。设置好所需通道和值,再调用HSL类的adjust()方法即可对图像进行  色相/饱和度调整。

(三)例程

使用HSL类,进行色相/饱和度调整。

复制代码
 1 #include <iostream>
 2 #include "opencv2/core.hpp"
 3 #include "opencv2/imgproc.hpp"
 4 #include "opencv2/highgui.hpp"
 5  
 6 #include "HSL.hpp"
 7  
 8 using namespace std;
 9 using namespace cv;
10  
11 static string window_name = "photo";
12 static Mat src;
13  
14 static HSL hsl;
15 static int color = 0;
16 static int hue = 180;
17 static int saturation = 100;
18 static int brightness = 100;
19  
20 static void callbackAdjust(int , void *)
21 {
22     Mat dst;
23  
24     hsl.channels[color].hue = hue - 180;
25     hsl.channels[color].saturation = saturation - 100;
26     hsl.channels[color].brightness = brightness - 100;
27  
28     hsl.adjust(src, dst);
29  
30     imshow(window_name, dst);
31 }
32  
33 static void callbackAdjustColor(int , void * )
34 {
35     hue = hsl.channels[color].hue + 180;
36     saturation = hsl.channels[color].saturation + 100;
37     brightness = hsl.channels[color].brightness + 100;
38  
39     setTrackbarPos("hue", window_name, hue);
40     setTrackbarPos("saturation", window_name, saturation);
41     setTrackbarPos("brightness", window_name, brightness);
42     callbackAdjust(0, 0);
43 }
44  
45  
46 int main()
47 {
48     src = imread("building.jpg");
49  
50     if ( !src.data ) {
51         cout << "error read image" << endl;
52         return -1;
53     }
54  
55     namedWindow(window_name);
56     createTrackbar("color", window_name, &color, 6, callbackAdjustColor);
57     createTrackbar("hue", window_name, &hue, 2*hue, callbackAdjust);
58     createTrackbar("saturation", window_name, &saturation, 2*saturation, callbackAdjust);
59     createTrackbar("brightness", window_name, &brightness, 2*brightness, callbackAdjust);
60     callbackAdjust(0, 0);
61  
62     waitKey();
63     return 0;
64  
65 }
复制代码

运行效果:

原图:

对蓝色通道(color = 5)调整hue, brightness后

再对全图(color = 0)调整saturation, brightness后


posted on   一杯清酒邀明月  阅读(2000)  评论(1编辑  收藏  举报
编辑推荐:
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

点击右上角即可分享
微信分享提示