我不会在字节 [] 形式的图像上设置对比度/亮度。 该图像位于 YCbCr_420 色彩空间(安卓相机)中。 我以这种方式获得亮度值:
for (int j = 0, yp = 0; j < height; j++) {
for (int i = 0; i < width; i++, yp++) {
int y = (0xff & (yuv420sp[yp])) - 16;
}
}
如何操纵 y 值来设置更多光线? 我也不确定这是否是设置回值的正确方法:
yuv420sp[yp] = (byte) ((0xff & y) +16);
感谢您的帮助。
最佳答案
我从这个 API 中知道的一点是 3 个 channel 的值连接在一个字节数组中。所以,同样在使用 RGB 的 Windows 中,我猜这里你有相同的,我的意思是,每 3 个字节代表一个像素。所以我猜,您可以访问它每 3 个位置跳转一次以仅访问一个 channel (在您的情况下为 Luma)。就是不知道luma是用第一个、第二个还是第三个字节表示的。
第二,如果我理解你只是想改变亮度/对比度(增加/减少),对吗? 因为如果是这样,对比度只是乘法,亮度是加法。
例如 - 假设您正在使用 8 位 channel 的伪代码:
luma[y] = luma[y] * 1.10; //Increases contrast
或者你可以有一个更通用的形式:
luma[y] = luma[y] + (luma[y] * contrast); //where contrast ranges from -1.0 to 1.0
同样你可以对亮度做同样的事情:
luma[y] = luma[y] + bright; //Where bright can range from -255 to 255
在这两种情况下,在将最终像素结果分配给图像之前,您必须小心上溢和下溢。
关于android - 在 YUV 颜色空间中操纵亮度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10684220/