C实现改变彩色图像亮度
来源:互联网 发布:查看公司开放端口 编辑:程序博客网 时间:2024/06/09 19:40
对于灰度图像,改变亮度只需同时增加或减少整张图像的灰度值即可,但是对于彩色图像,相对来说就比较麻烦点。对RGB空间的图像来说,需将RGB空间转换到HSL,H是色调,S是饱和度,L是亮度。改变亮度时将RGB颜色转换成HSL表示,修改L,其他不变,再将HSL转换为RGB。
公式:
RGB to HSL:
HSL to RGB:
代码实现:
#ifndef max#define max(a,b) (((a) > (b)) ? (a) : (b))#endif#ifndef min#define min(a,b) (((a) < (b)) ? (a) : (b))#endifvoid RGB32ChangeBright1(uint8_t* src, int width, int height, float factor){ int i,j; uint32_t* img; float r,g,b; uint32_t color; float h, s, l; float m,M; float f,d; float tr,tg,tb; float p,q; float ntr,ntg,ntb; img = (uint32_t*)src; for (i = 0; i < height; i++) { for (j = 0; j < width; j++) { //RGB to HSL color = *img; r = (float)(color & 0x000000FF); g = (float)((color >> 8) & 0x000000FF); b = (float)((color >> 16) & 0x000000FF); r /= 255.0; g /= 255.0; b /= 255.0; m = min(min(r,g),b), M = max(max(r,g),b); l = (m + M)/2; if (M==m) h = s = 0.0; else { f = (r==m)?(g-b):((g==m)?(b-r):(r-g)); d = (r==m)?3.0f:((g==m)?5.0f:1.0f); h = (d - f/(M-m)); if (h>=6.0) h-=6; h*=60; s = (2*l<=1)?((M-m)/(M+m)):((M-m)/(2-M-m)); } l += factor; if (l < 0) { l = 0; } if (l > 1.0) { l = 1.0; } //HSL to RGB q = 2*l<1?l*(1+s):(l+s-l*s); p = 2*l-q; h = h/360; tr = h + ONE_THIRD; tg = h; tb = h - ONE_THIRD; ntr = tr<0?tr+1:(tr>1?tr-1:tr); ntg = tg<0?tg+1:(tg>1?tg-1:tg); ntb = tb<0?tb+1:(tb>1?tb-1:tb); r = 255*(6*ntr<1?p+(q-p)*6*ntr:(2*ntr<1?q:(3*ntr<2?p+(q-p)*6*(2.0f*ONE_THIRD-ntr):p))), g = 255*(6*ntg<1?p+(q-p)*6*ntg:(2*ntg<1?q:(3*ntg<2?p+(q-p)*6*(2.0f*ONE_THIRD-ntg):p))), b = 255*(6*ntb<1?p+(q-p)*6*ntb:(2*ntb<1?q:(3*ntb<2?p+(q-p)*6*(2.0f*ONE_THIRD-ntb):p))); color &= 0xFF000000; color = (uint8_t)(r<0?0:(r>255?255:r)) + ((uint8_t)(g<0?0:(g>255?255:g)) << 8) + ((uint8_t)(b<0?0:(b>255?255:b)) << 16); // *img = color; img++; } }}
测试效果:
原图:
效果图,测试参数0.2
0 0
- C实现改变彩色图像亮度
- 调节亮度、对比度及gamma值实现彩色图像的亮度变换
- opencv(c++)改变图像的对比度和亮度
- 改变图像的对比度和亮度
- opencv-改变图像的对比度和亮度
- 改变图像的对比度和亮度
- Class03 改变图像对比度和亮度
- 改变图像的对比度和亮度
- 【opencv练习08 - 改变图像亮度】
- c语言实现24位彩色图像二值化
- opengl实现图像亮度调整
- Android改变图像的饱和度、亮度和对比度
- 获得和改变bmp图像的亮度对比度
- 学习opencv(4)---改变图像的对比度和亮度
- opencv学习笔记9 改变图像的对比度和亮度
- OpenCV之改变图像的对比度和亮度
- Android改变图像的饱和度、亮度和对比度
- OpenCV学习:改变图像的对比度和亮度
- android 之 ListView 里面嵌套 GridView 遇到的问题及其解决方法。
- unity中同时使用Easy Code Scanner插件与everyplay插件扫二维码时会产生闪退的解决方法
- Linux内核--基于Netfilter的内核级包过滤防火墙实现
- Spark进阶(四)
- Android Proguard混淆打包经验总结
- C实现改变彩色图像亮度
- java——不同数据类型的转换规则
- Android DeepLink 技术
- 《当幸福来敲门》
- 关于Vs2015中C#交互(C# Interactive)窗口的应用。
- AngularJs内置指令大全
- 【教程】手把手教你如何利用工具(IE9的F12)去分析模拟登陆网站(百度首页)的内部逻辑过程
- AndroidStudio获取SHA1值
- 读书笔记《TAOCP》 V1 S1.1