Я не хочу устанавливать контраст/ярлыки на изображении, который находится в байте формы []. Изображение находится в цветовом пространстве YCbCr_420 (камера для Android). Я получаю значение яркости следующим образом:
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);
Thanx для любой помощи.
Маленькое, что я знаю из этого API, состоит в том, что значения для 3-х каналов объединены в массив байтов. Точно так же в Windows, работающей с RGB, я предполагаю, что у вас есть то же самое, я имею в виду, каждые 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
В обоих случаях вы должны быть осторожны с переполнениями и потоками, прежде чем назначать результат конечного пикселя вашему изображению.
Обработка YUV лучше всего демонстрируется в файле APLEAGLView.m этого примера приложения:
Правильные настройки яркости и контрастности, чтобы поддерживать их соотношение пропорционально друг другу, демонстрируются в файле Shader.fsh по адресу:
Если вам нужна помощь в обмене кодом, я могу помочь. Пока же, используя заданное пользователем значение порога яркости, корректируемая яркостью плоскость Y вычисляется следующим образом:
Y '= (Y - (16/255)) * lumaThreshold;