为了能更好地解决RGB三基色LED灯亮度的调节对颜色影响的问题,通常采用三路
PWM来控制三色灯的每种颜色的导通程度来实现彩色混色,调节亮度如果采用三种
基色同时递加或递减来实现亮度的调节,那么会造成颜色发生偏移问题,为了能解决
此问题,采用HSV空间颜色来实现亮度调节的
首先将RGB空间颜色转换成HSV空间颜色,然后调节V的值,调整之后,再将HSV空间
颜色转回到RGB空间颜色这样就实现了三色灯亮度的调节
step 1:
在头文件中加入#include "math.h"
step 2:
定义2个结构体数据类型
//color data struct
typedef struct{
unsigned char R;
unsigned char G;
unsigned char B;
unsigned char l;
}COLOR_RGB;
//hsv data struct
typedef struct{
float H;
float S;
float V;
}COLOR_HSV;
step 3:
定义一个COLOR_RGB结构体变量rgb_v
COLOR_RGB rgb_v;
step 4:
定义2个函数,一个求最大数,一个求最小数
/**------------------------------------------------------------------------------------------------
* @brief : This is return a and b of minimum value
* @param : None
* @retval : None
*----------------------------------------------------------------------------------------------*/
static float minValue(float a,float b) //calc minimum value
float temp = b;
if(a < temp)
temp = a;
return temp;
/**------------------------------------------------------------------------------------------------
* @brief : This is return a and b of maximum value
* @param : None
* @retval : None
*----------------------------------------------------------------------------------------------*/
static float maxValue(float a,float b) //calc maximum value
float temp = b;
if(a > temp)
temp = a;
return temp;
step 5:
定义一个RGB空间颜色向HSV空间颜色转变的函数
/**------------------------------------------------------------------------------------------------
* @brief : This is RGB to HSV convert function
* @param : None
* @retval : None
*----------------------------------------------------------------------------------------------*/
static void RGB_TO_HSV(const COLOR_RGB* input,COLOR_HSV* output) // convert RGB value to HSV value
float r,g,b,minRGB,maxRGB,deltaRGB;
r = input->R/255.0f;
g = input->G/255.0f;
b = input->B/255.0f;
minRGB = minValue(r,minValue(g,b));
maxRGB = maxValue(r,maxValue(g,b));
deltaRGB = maxRGB - minRGB;
output->V = maxRGB;
if(maxRGB != 0.0f)
output->S = deltaRGB / maxRGB;
output->S = 0.0f;
if (output->S <= 0.0f)
output->H = 0.0f;
if (r == maxRGB)
output->H = (g-b)/deltaRGB;
if (g == maxRGB)
output->H = 2.0f + (b-r)/deltaRGB;
if (b == maxRGB)
output->H = 4.0f + (r-g)/deltaRGB;
output->H = output->H * 60.0f;
if (output->H < 0.0f)
output->H += 360;
output->H /= 360;
step 6:
定义一个HSV空间颜色向RGB空间颜色转变的函数
/**------------------------------------------------------------------------------------------------
* @brief : This is HSV to RGB convert function
* @param : None
* @retval : None
*----------------------------------------------------------------------------------------------*/
static void HSV_TO_RGB(COLOR_HSV* input,COLOR_RGB* output) //convert HSV value to RGB value
float R,G,B;
int k;
float aa,bb,cc,f;
if (input->S <= 0.0f)
R = G = B = input->V;
if (input->H == 1.0f)
input->H = 0.0f;
input->H *= 6.0f;
k = (int)floor(input->H);
f = input->H - k;
aa = input->V * (1.0f - input->S);
bb = input->V * (1.0f - input->S * f);
cc = input->V * (1.0f -(input->S * (1.0f - f)));
switch(k)
case 0:
R = input->V;
G = cc;
B =aa;
break;
case 1:
R = bb;
G = input->V;
B = aa;
break;
case 2:
R =aa;
G = input->V;
B = cc;
break;
case 3:
R = aa;
G = bb;
B = input->V;
break;
case 4:
R = cc;
G = aa;
B = input->V;
break;
case 5:
R = input->V;
G = aa;
B = bb;
break;
output->R = (unsigned char)(R * 255);
output->G = (unsigned char)(G * 255);
output->B = (unsigned char)(B * 255);
step 7:
定义一个调整亮度函数
/**---------------------------------------------------------------------------
* @brief : This is brightness adjusting function
* @param : None
* @retval : None
*-----------------------------------------------------------------------------*/
void adjustBrightness(int step) //adjust RGB brightness
COLOR_HSV hsv_v;
RGB_TO_HSV(&rgb_v,&hsv_v);
rgb_v.l += step;
if(rgb_v.l <= 0)
rgb_v.l = 1;
}else if(rgb_v.l >= 100)
rgb_v.l = 100;
hsv_v.V = rgb_v.l /100.0;
HSV_TO_RGB(&hsv_v,&rgb_v);
step 8:
在main函数中测试RGB亮度调节
/**@brief Application main function.
int main(void)
bool erase_bonds;
// Initialize.
// uart_init();
log_init();
timers_init();
buttons_leds_init(&erase_bonds);
power_management_init();
ble_stack_init();
gap_params_init();
gatt_init();
services_init();
advertising_init();
conn_params_init();
// Start execution.
// printf("\r\nUART started.\r\n");
NRF_LOG_INFO("Debug logging for UART over RTT started.");
advertising_start();
// 亮度调节测试
rgb_v.R = 0xef;
rgb_v.G = 0x36;
rgb_v.B = 0x86;
rgb_v.l = 0x64;
adjustBrightness(-30); //亮度减少30%
//打印转换后的RGB值及亮度值
NRF_LOG_INFO("R=%02x,G=%02x,B=%02x,L=%02x\n",rgb_v.R, rgb_v.G ,rgb_v.B,rgb_v.l);
// Enter main loop.
for (;;)
idle_state_handle();
DEMO下载地址:https://download.csdn.net/download/mygod2008ok/11180344
目的 为了能更好地解决RGB三基色LED灯亮度的调节对颜色影响的问题,通常采用三路PWM来控制三色灯的每种颜色的导通程度来实现彩色混色,调节亮度如果采用三种基色同时递加或递减来实现亮度的调节,那么会造成颜色发生偏移问题,为了能解决此问题,采用HSV空间颜色来实现亮度调节的 原理 首先将RGB空间颜色转换成HSV空间颜色,然后调节V的值,调整之...
本源码附带了仿真程序,采用Proteus7.8进行仿真,不低于这个版本的软件都能打开,亲测Proteus8完美运行,附带AD原理图可以进行pcb画板操作,适用于毕业设计,学习提升,资料齐全。
程序介绍:
智能家居灯
1、测量环境亮度,根据亮度调节RBG灯的亮度
2、测量室内温度,根据温度改变RGB灯的颜色
3、LCD显示当前温度和亮度
对于灰度图像,改变亮度只需同时增加或减少整张图像的灰度值即可,但是对于彩色图像,相对来说就比较麻烦点。对RGB空间的图像来说,需将RGB空间转换到HSL,H是色调,S是饱和度,L是亮度。改变亮度时将RGB颜色转换成HSL表示,修改L,其他不变,再将HSL转换为RGB。
RGB to HSL:
HSL to RGB:
代码实现:#ifndef max
#define max(a
首先要能记住十大天干和十二地支,十天干:甲、乙、丙、丁、戊、己、庚、辛、壬、癸;十二地支:子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥;
天干地支纪年法首先是天干在前,地支在后,比如今年2005就为-乙酉年。
天干算法:
4、 5、 6、 7、 8、 9、 0、 1、 2、 3 对应的十天干就...
要使用Python调节图像的亮度,可以使用一个名为Lightness.py的脚本。这个脚本可以通过命令行参数指定图像路径、亮度值和基于当前亮度调整。具体的使用方法如下:
1. 打开命令行终端或者命令提示符。
2. 运行以下命令:python Lightness.py path value basedOnCurrentValue
其中,path是图像的文件路径,value是亮度调整的值,basedOnCurrentValue是一个布尔值,决定是否基于当前亮度进行调整。
举个例子,如果你想要调节路径为C:\Users\PDD\Desktop\pdd.jpg的图像亮度为0.3,并且基于当前亮度进行调整,你可以运行以下命令:python Lightness.py C:\Users\PDD\Desktop\pdd.jpg 0.3 1。
在Lightness.py脚本中,还有一个名为RGBAlgorithm的函数可以用来实现亮度调节。这个函数接受一个RGB图像和亮度值作为参数,并可以选择是否基于当前亮度进行调整。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [python语言之图像处理:亮度调整算法](https://blog.csdn.net/cuixiang0620/article/details/100439601)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
C语言入门之自定义结构体数据struct Student { int num; char name[20]; char sex; int age; 类型
51100
Location specified by ndk.dir (C:\Users\xxxxx\AppData\Local\Android\Sdk\ndk-bundle) did not cont