1

我不会以字节 [] 的形式在图像上设置对比度/亮度。图像在 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);

感谢任何帮助。

4

2 回答 2

2

我从这个 API 中知道的一点是 3 个通道的值被连接在一个字节数组中。因此,同样在使用 RGB 的 Windows 中,我猜这里你有相同的,我的意思是,每 3 个字节代表一个像素。所以我猜,你可以每跳 3 个位置访问它,只访问一个频道(在你的情况下是 Luma)。我只是不知道亮度是否由第一个、第二个或第三个字节表示。

其次,如果我理解你只是想改变亮度/对比度(增加/减少)是正确的吗?因为如果是这样,对比度只是乘法,亮度是加法。

例如 - 假设您正在使用 8 位通道的伪代码:

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

在这两种情况下,在将最终像素结果分配给图像之前,您必须小心上溢和下溢。

于 2012-05-21T11:44:15.140 回答
0

YUV 处理在此示例应用程序的 APLEAGLView.m 文件中得到了最好的演示:

https://developer.apple.com/library/ios/samplecode/AVBasicVideoOutput/Listings/AVBasicVideoOutput_APLEAGLView_m.html#//apple_ref/doc/uid/DTS40013109-AVBasicVideoOutput_APLEAGLView_m-DontLinkElementID_6

Shader.fsh 文件中演示了对亮度和对比度的适当调整,以便它们保持彼此成比例的关系:

https://developer.apple.com/library/ios/samplecode/AVBasicVideoOutput/Listings/AVBasicVideoOutput_Shaders_Shader_fsh.html#//apple_ref/doc/uid/DTS40013109-AVBasicVideoOutput_Shaders_Shader_fsh-DontLinkElementID_9

如果您需要帮助解释代码,我可以提供帮助。不过,目前,使用用户指定的亮度阈值,亮度调整后的 Y 平面计算如下:

Y' = (Y - (16 / 255)) * lumaThreshold;

于 2016-01-24T05:04:00.793 回答