图象处理算法

doudou52520 2005-11-16 10:56:44
一个图象处理的问题,有把图象上的颜色变的更深的算法吗?
比如绿色更绿,黄色更黄,红色更红,
总之是在正常的情况下让图片颜色更加鲜亮。
...全文
175 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
寻开心 2005-11-16
  • 打赏
  • 举报
回复
把每个颜色分量都乘上一个系数不就可以了吗?
比如,提取rgb颜色数值,各自乘上1.2,
red = red * 1.2;
if (red>255) red = 255;

再复制回去
寻开心 2005-11-16
  • 打赏
  • 举报
回复
http://www.easyrgb.com/math.php?MATH=M18
这个是一个关于各种颜色空间相互转换公式的网站

对于楼主的这个问题,转换颜色空间的代价比较高,而且效果上也相差不了多少
所以直接乘一个系数是最简单的办法
cxian315 2005-11-16
  • 打赏
  • 举报
回复
ddmor说的有道理,转换成HSL颜色空间再处理
ddmor 2005-11-16
  • 打赏
  • 举报
回复
如果单纯在RGB上乘一个系数是不对的,比如(255,240,240)和(255,220,220)乘上1.2后都成了(255,255,255),这是不合理的
Yofoo 2005-11-16
  • 打赏
  • 举报
回复
同意 ddmor ,其他人说的就是调节亮度,亮度并不能使图象鲜亮
ysc918 2005-11-16
  • 打赏
  • 举报
回复
同意一楼的,使其分量值更接近于255,而让另两个分量更接近0。
(比如(255,0,0)是纯红色,就更红了,呵呵)
ddmor 2005-11-16
  • 打赏
  • 举报
回复
个人觉得应该先将RGB转换为HSL颜色空间。即色调、色饱和度和亮度三个分量,然后保持色调不变,提高色饱和度和亮度分量就可以了。
这里提供一个转换函数:
//H色调
//S饱和度
//L亮度
#define min(a,b) (((a)<(b))?(a):(b))

#define max(a,b) (((a)>(b))?(a):(b))

#define bmax 100.0 //Input HSL channel maximum

#define cmax 255.0 //Output color maximum



void HslToRgb(double h, double s, double L, double& r, double& g, double& b) {

h *= cmax*6.0/bmax;

s *= cmax/bmax;

L *= cmax/bmax;

r = min(cmax, max(0.0, fabs(3.0*cmax - fmod(h, 6.0*cmax)) - cmax));

g = min(cmax, max(0.0, fabs(3.0*cmax - fmod(h + 4.0*cmax, 6.0*cmax)) - cmax));

b = min(cmax, max(0.0, fabs(3.0*cmax - fmod(h + 2.0*cmax, 6.0*cmax)) - cmax));



if (L > cmax/2) {

r = (L*2/cmax-1)*(cmax-r) + r;

g = (L*2/cmax-1)*(cmax-g) + g;

b = (L*2/cmax-1)*(cmax-b) + b;

}



else {

r *= L*2/cmax;

g *= L*2/cmax;

b *= L*2/cmax;

}

double ave = (r + g + b)/3.0;

r = (1.0-s/cmax)*(ave - r) + r;

g = (1.0-s/cmax)*(ave - g) + g;

b = (1.0-s/cmax)*(ave - b) + b;

}

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧