我试图将12位RGGB颜色值转换为8位RGGB颜色值,但用我目前的方法,它给出了奇怪的结果。将12位颜色值转换为8位颜色值C++
从逻辑上讲,我认为简单地将12位RGGB成8位RGGB会工作,并非常简单:
// raw_color_array contains R,G1,G2,B in a bayer pattern with each element
// ranging from 0 to 4096
for(int i = 0; i < array_size; i++)
{
raw_color_array[i] /= 16; // 4096 becomes 256 and so on
}
然而,在实践中这其实是行不通的。例如,给出一个带有水和冰块的小图像,您可以看到转换中实际发生的情况(最右图)。
为什么会出现这种情况?以及如何在左侧获得相同(或接近)的图像,而是以8位值为准?谢谢!
编辑:关@MSalters答案,我得到一个更好的图像质量,但颜色仍然激烈倾斜。我可以研究哪些资源将12位数据转换为8位数据,而不会造成质量的严重损失?
你有没有试过在频道上做直方图,看看你是否应该赞成某些范围,而不是广泛开放的16分方法? –
您是否调试过并观察过'raw_color_array'的值?他们是你期望的吗? 'raw_color_array'的数据类型是什么?你有一个舍入错误? –
@ChrisO事实上,我的第一次尝试是观察直方图并猜测正态化方案。它产生的结果几乎相同,但它不是一个可扩展的解决方案(例如,我需要重新为14位彩色图像等进行此过程)。想知道这是否可能,而没有关注它。 –