你知道如何創建一個自定義的核心圖像過濾器,它返回一個CIKernel(或CIColorKernel)對象的輸出?如果沒有,你應該;並且,我很樂意爲您提供易於理解的說明。
假設你做什麼,這裏的OpenGL ES的代碼,將只返回它處理圖像的亮度值:
vec4 rgb2hsl(vec4 color)
{
//Compute min and max component values
float MAX = max(color.r, max(color.g, color.b));
float MIN = min(color.r, min(color.g, color.b));
//Make sure MAX > MIN to avoid division by zero later
MAX = max(MIN + 1e-6, MAX);
//Compute luminosity
float l = (MIN + MAX)/2.0;
//Compute saturation
float s = (l < 0.5 ? (MAX - MIN)/(MIN + MAX) : (MAX - MIN)/(2.0 - MAX - MIN));
//Compute hue
float h = (MAX == color.r ? (color.g - color.b)/(MAX - MIN) : (MAX == color.g ? 2.0 + (color.b - color.r)/(MAX - MIN) : 4.0 + (color.r - color.g)/(MAX - MIN)));
h /= 6.0;
h = (h < 0.0 ? 1.0 + h : h);
return vec4(h, s, l, color.a);
}
kernel vec4 hsl(sampler image)
{
//Get pixel from image (assume its alpha is 1.0 and don't unpremultiply)
vec4 pixel = unpremultiply(sample(image, samplerCoord(image)));
//Convert to HSL; only display luminance value
return premultiply(vec4(vec3(rgb2hsl(pixel).b), 1.0));
}
以上是由蘋果開發者最初寫的OpenGL ES代碼;我修改它只顯示亮度值。
也許它結合了曝光設置(假設你可以讀這個)和測量的亮度來估計絕對亮度。 –
與此同時,我檢查了它是好的方向,我們可以閱讀曝光設置,但關鍵是如何正確組合曝光設置 –
使用試驗和錯誤來構建應用程序插值的查找表。 –