作者: | 来源:互联网 | 2023-10-10 21:10
教程地址:http:www.opencv.org.cnopencvdoc2.3.2htmldoctutorialscorebasic_linear_transformbasic
教程地址:
http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/core/basic_linear_transform/basic_linear_transform.html
关于这个改变图像对比度和亮度的教程里给的例子程序,
RT,我不明白,为什么对比度可以是double,亮度要定义成int?
教程里说“因为 \alpha \cdot p(i,j) + \beta 的运算结果可能超出像素取值范围,还可能是非整数(如果 \alpha 是浮点数的话),所以我们要用 saturate_cast 对结果进行转换,以确保它为有效值”
这是针对RGB三个值都必须取整(0~255)而言的吧,
那为什么对比度可以是double?亮度却要定义成int?
我把int改成double,发现运算也可以进行啊...输出的图片肉眼看不出来有什么区别OTL
PS:亮度0是指背景黑色的亮度我设置的是0
左边用50做亮度值输入 右边是50.5
请问,这里是基于什么原因,才会给亮度定义成int,给对比度定义成double的?亮度非得是整数吗?
3 个解决方案
亮度就是 调整RGB的三个值啊,RGB是整数, 你弄个double,最终还是会被舍弃掉啊。
比如你说亮度128的像素提高 3.5 最终还是跟提高3一样 等于31啊
因此,你用小数,也没问题,只是没啥意义。
而对比度,是比率啊, 当然允许是doublel了,比如 亮度想提高2.5倍,完全合理啊