manipulating luma in YUV color space

后端 未结 2 429
悲哀的现实
悲哀的现实 2021-01-27 02:12

I wont to set contrast / brightnes on image witch is in form byte[]. The image is in YCbCr_420 color space (android camera). I am geting luma value this way :

f         


        
2条回答
  •  谎友^
    谎友^ (楼主)
    2021-01-27 02:41

    The little that I know from this API is that the values for the 3 channels are concatenated in a byte array. So, likewise in Windows working with RGB, I guess here you have the same, I mean, every 3 bytes representing one pixel. So I GUESS, you could access it jumping every 3 positions to access only one single channel (Luma in your case). I just don't know if the luma is represented by the first, second or third byte.

    Second, if I understand you just want to change bright/contrast (increase/decrease) is that correct? Because if so, contrast is just multiplication and brightness is addition.

    For instance - pseudo code assuming you are working with 8bits channel:

    luma[y] = luma[y] * 1.10; //Increases contrast
    

    or you can have a more generic form:

    luma[y] = luma[y] + (luma[y] * contrast); //where contrast ranges from -1.0 to 1.0
    

    Similarly you can do the same with brightness:

    luma[y] = luma[y] + bright; //Where bright can range from -255 to 255
    

    In both cases you have to be careful with overflows and underflows before you assign the final pixel result to your image.

提交回复
热议问题