关于histogram的程序解读

bishengbi 2011-01-08 12:51:59
if ( contrast > 0 ) {
(1) double delta = 127.0 * contrast / 100.0
(2) double a = 255.0 / ( 255.0 - delta * 2 );
(3) double b = a * ( brightness - delta );
(4) for (int i = 0; i < 256; i++ ){
int v = cvRound( a * i + b );
if( v < 0 ){
v = 0;
}
if( v > 255 ){
v = 255;
}
lookUpTable[i] = ( unsigned char )v;
}
} else {
(5) double delta = -128.0 * contrast / 100.0;
(6) double a = (256.0 - delta * 2.0) / 255.0;
(7) double b = a * brightness + delta;
.... }
}
...全文
82 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
bishengbi 2011-01-10
  • 打赏
  • 举报
回复
十分感谢,呵呵
sparrow081 2011-01-09
  • 打赏
  • 举报
回复
具体的,我也不清楚了。
我只能是依据 直方图的规则 来分析的。
[Quote=引用 3 楼 bishengbi 的回复:]

谢谢,
constrast是对比度
brightness是辉度,两者是对应的,函数changeBrightnessAndContrast
请问(1) 到 (3)的公式来由是什么呢?
Xout = ( b'-a')/(b-a)*(Xin-a) +a'和以上的有什么联系呢?
[/Quote]
bishengbi 2011-01-09
  • 打赏
  • 举报
回复
谢谢,
constrast是对比度
brightness是辉度,两者是对应的,函数changeBrightnessAndContrast
请问(1) 到 (3)的公式来由是什么呢?
Xout = ( b'-a')/(b-a)*(Xin-a) +a'和以上的有什么联系呢?
sparrow081 2011-01-09
  • 打赏
  • 举报
回复

if ( contrast > 0 ) { /* 如果 “contrast”在 x 轴的右边 */
(1) double delta = 127.0 * contrast / 100.0 /* (1) 到 (3) 为的是求出 相应的
* "constrast" 占用的区间 */
(2) double a = 255.0 / ( 255.0 - delta * 2 );
(3) double b = a * ( brightness - delta );
(4) for (int i = 0; i < 256; i++ ){ /* 划分了 256 个区间 */
int v = cvRound( a * i + b ); /* a * i + b 应该就是确定了一个区间的大小。 cvRound
* 返回该区间对应得 y 轴的最大值 */
if( v < 0 ){ /* 每个区间对于的 y 轴的取值范围是 [0, 255] 小于的,取0.大于 取255 */
v = 0;
}
if( v > 255 ){
v = 255;
}
lookUpTable[i] = ( unsigned char )v; /* 保存每个区间对应的 y 轴的值 */
}

/* 不知道lz 的“constrast” 是不是 与 “brightness” 对立的? */
ryfdizuo 2011-01-08
  • 打赏
  • 举报
回复
柱状图 就是一些区间

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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