我有充分理解伽马校正需求的问题.我希望你们能帮助我.
假设我们想要显示256个相邻像素.这些像素应该是从黑到白的平滑渐变.为了表示它们的颜色,我们使用线性灰度值.0..255.
由于人眼的非线性,显示器不能只将这些值转换为线性亮度值.如果相邻像素具有亮度值(1/256)*I_max, (2/256)*I_max, et cetera
,我们将在较暗区域中感知到两个像素之间的亮度差异太大(梯度将不是平滑的).
幸运的是,监视器对人眼具有相互的非线性.这意味着,如果我们将线性灰度值0..255
放入帧缓冲区,则监视器将它们转换为非线性亮度值x ^ gamma.然而,由于我们的眼睛是非线性的,反之亦然,我们感觉到平滑的线性梯度.显示器和我们的一只眼睛的非线性相互抵消.
那么,为什么我们需要伽马校正?我在书中读到,我们总是希望显示器产生线性亮度值.根据它们,必须在将灰度值写入帧缓冲器之前补偿监视器的非线性.这是通过伽马校正完成的.然而,我的问题在于 - 据我所知 - 当监视器产生线性亮度值时,我们不会感知线性亮度值(即我们不会感觉到平滑,稳定的梯度).
据我所知,如果我们将线性灰度值放入帧缓冲区,那将是完美的.监视器将这些值转换为非线性亮度值,并且我们的眼睛再次感知线性亮度值,因为眼睛是互逆的非线性.不需要对帧缓冲器中的灰度值进行伽马校正,也不需要强制监视器产生线性亮度值.
我看待这些事情的方式有什么问题?谢谢
是否有工具/程序/颜色系统可以让您获得相同亮度(感知亮度)的颜色?
假设我选择一种颜色(确定RGB值),程序会给我带有相同亮度但色调不同的色轮周围的所有颜色?
我还没有见过这样的工具,我遇到的是三种不同的颜色亮度算法:
(0.2126*R) + (0.7152*G) + (0.0722*B)
(0.299*R + 0.587*G + 0.114*B)
sqrt( 0.241*R^2 + 0.691*G^2 + 0.068*B^2 )
Run Code Online (Sandbox Code Playgroud)
为了清楚起见,我说的是颜色亮度/感知亮度或者你想要称之为的任何东西 - 遇到的属性我们感觉红色比蓝色更明亮.(因此255,0,0的亮度值高于0,0,255.)
PS:有谁知道在这个网站上使用哪种算法来确定颜色变亮:http://www.workwithcolor.com/hsl-color-picker-01.htm 看起来他们没有使用任何发布的算法.
根据http://www.workwithcolor.com/color-luminance-2233.htm,RED (#FF0000) 的亮度为 54%。浅粉色 (#FF8080) 的亮度为:89%。我们的设计师喜欢它,但它是如何确定的?在这里试试:http : //www.workwithcolor.com/hsl-color-schemer-01.htm
我尝试使用W3C 发布的相对亮度公式,虽然范围是 [0,1],但红色是0.21
,白色是1.00
。
我在想,也许 workwithcolor 所做的是首先将颜色转换为灰度,然后读取灰度的亮度。我试过了,但它仍然没有给出相同的结果。
到目前为止我已经尝试过:http : //jsfiddle.net/HytZQ/
如果我将平均亮度绘制为 x 像素位置的函数,我可以看到图像沿中心比边缘更亮。
我想使用 OpenCV 纠正这个问题,以便整个图像的亮度相同。这可能吗?
编辑:到目前为止我的代码是
import cv2
import pylab
img = cv2.imread('3.jpeg', 1)
cv2.imshow("img",img)
lab= cv2.cvtColor(img, cv2.COLOR_BGR2LAB)
cv2.imshow("lab",lab)
l, a, b = cv2.split(lab)
values = []
for c in xrange(l.shape[1]):
count = 0
for r in xrange(l.shape[0]):
count += l[r][c]
values.append(1.0 * count / l.shape[0])
pylab.figure()
pylab.ylabel('Average Luminance')
pylab.xlabel('X axis')
pylab.plot(values, 'k-')
pylab.show()
Run Code Online (Sandbox Code Playgroud) 我正在尝试基于 Google 的 Material Theme Builder 3在 SASS/JS 中生成调色板,它要求根据相对亮度而不是亮度/亮度函数生成色调调色板。
我可以使用 SCSS 中的以下函数获取亮度值:
@function get-luminance($color) {
$colors: (
'red': red($color),
'green': green($color),
'blue': blue($color),
);
@each $name, $value in $colors {
$adjusted: 0;
$value: $value / 255;
@if $value < 0.03928 {
$value: $value / 12.92;
} @else {
$value: ($value + 0.055) / 1.055;
$value: math.pow($value, 2.4);
}
$colors: map-merge($colors, ($name: $value));
}
@return (map-get($colors, 'red') * 0.2126) + (map-get($colors, 'green') * 0.7152) + (map-get($colors, 'blue') * …
Run Code Online (Sandbox Code Playgroud) 我有一个简单的问题,但我找不到答案。请注意,我几乎是一个完全的初学者。
所以我有一个应用程序(它不是我的,但我正在为它做出贡献),并且在颜色背景上书写,用户可以更改它。如果背景足够亮,则文字应显示为黑色,如果背景不够亮,则文字应保持白色。
该应用程序是一款面向中小学生的学校日记应用程序,连接到匈牙利全州范围的学校日记服务。这里,最好的注释是5,最差的是1。用户可以在设置中设置每个等级的颜色。目前,只有注释“4”的代码被硬编码为黑色文本(因为“4”注释的背景默认为黄色),所有其他注释均为白色。这就是我想要自动化的。
现在的代码:
switch (evaluation.NumberValue) {
case 1:
bColor = globals.color1;
fColor = Colors.white;
break;
case 2:
bColor = globals.color2;
fColor = Colors.white;
break;
case 3:
bColor = globals.color3;
fColor = Colors.white;
break;
case 4:
bColor = globals.color4;
fColor = Colors.black; //This should be white if color4 is dark enough. Same applies to all of them.
break;
case 5: //I'm looking for something like this:
bColor = globals.color5;
fColor = (lightLevel(globals.color5) > 50) ? Colors.black …
Run Code Online (Sandbox Code Playgroud) 我正在尝试制作一个应用程序,我必须像这个应用程序一样计算相机的亮度:http://itunes.apple.com/us/app/megaman-luxmeter/id455660266?mt = 8
我找到了这个文件:http://b2cloud.com.au/tutorial/obtaining-luminosity-from-an-ios-camera
但我不知道如何直接适应相机,而不是图像.这是我的代码:
Image = [[UIImagePickerController alloc] init];
Image.delegate = self;
Image.sourceType = UIImagePickerControllerCameraCaptureModeVideo;
Image.showsCameraControls = NO;
[Image setWantsFullScreenLayout:YES];
Image.view.bounds = CGRectMake (0, 0, 320, 480);
[self.view addSubview:Image.view];
NSArray* dayArray = [NSArray arrayWithObjects:Image,nil];
for(NSString* day in dayArray)
{
for(int i=1;i<=2;i++)
{
UIImage* image = [UIImage imageNamed:[NSString stringWithFormat:@"%@%d.png",day,i]];
unsigned char* pixels = [image rgbaPixels];
double totalLuminance = 0.0;
for(int p=0;p<image.size.width*image.size.height*4;p+=4)
{
totalLuminance += pixels[p]*0.299 + pixels[p+1]*0.587 + pixels[p+2]*0.114;
}
totalLuminance /= (image.size.width*image.size.height);
totalLuminance …
Run Code Online (Sandbox Code Playgroud) luminance ×7
brightness ×4
colors ×3
algorithm ×1
background ×1
flutter ×1
formula ×1
gamma ×1
ios ×1
javascript ×1
objective-c ×1
opencv ×1
python ×1
rgb ×1
sass ×1