- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两张图片。我必须找到第一张图像中强度大于 0.8 的点。同时,我必须在相同点上找到第二张图像的强度,并且需要使用阈值/ slider 值(范围从 0 到 1)调整相同点上第二张图像上的光线。我做了如下。点上的黑色或深色区域的强度大于 0.8。我正在尝试使用 HSV 的 z 值。
但是我应该能够调整 image2 上的光线,而不是这个黑色区域。我怎样才能做到这一点?
public void CreateShaders()
{
/***********Vert Shader********************/
vertShader = GL.CreateShader(ShaderType.VertexShader);
GL.ShaderSource(vertShader, @"
attribute vec3 a_position;
varying vec2 vTexCoordIn;
void main() {
vTexCoordIn=( a_position.xy+1)/2 ;
gl_Position = vec4(a_position,1);
}");
GL.CompileShader(vertShader);
/***********Frag Shader ****************/
fragShader = GL.CreateShader(ShaderType.FragmentShader);
GL.ShaderSource(fragShader, @"
precision highp float;
uniform sampler2D sTexture1;
uniform sampler2D sTexture2;
varying vec2 vTexCoordIn;
const float Epsilon = 1e-10;
uniform float sSelectedIntensity1;//slider value 0 to 1
void main ()
{
vec2 vTexCoord=vec2(vTexCoordIn.x,vTexCoordIn.y);
vec4 color1 = texture2D (sTexture1, vTexCoord);
vec4 color2= texture2D (sTexture2, vTexCoord);
vec3 col1_hsv = RGBtoHSV(color1.rgb);
float col1_intensity =col1_hsv.z;
float ConstVal=0.8;
if(col1_intensity>ConstVal)
{
vec3 col_hsv = RGBtoHSV(color2.rgb);
col_hsv.z *= sSelectedIntensity1;//slider value 0 to 1
vec3 col_rgb = HSVtoRGB(col_hsv.rgb);
gl_FragColor = vec4(col_rgb.rgb, color2.a);
}
else
{
gl_FragColor = color2;
}
}");
GL.CompileShader(fragShader);
}
实际上,如果 image1 和 image2 分别是来自两个相邻相机 cam1 和 cam2 的帧。如果我在摄像头 1 前面放一个闪光灯,我应该能够调暗/消除摄像头 2 帧上的这种灯光效果。
最佳答案
如果您想修改颜色的亮度,您必须乘以 [0, 2] 范围内的值而不是 [0, 1] 范围内的值。如果您乘以 [0, 1] 范围内的值,结果将最多与源一样亮:
col_hsv.z *= sSelectedIntensity1 * 2.0;
如果您想根据另一幅图像的“明亮”部分来照亮图像,那么您必须为亮度添加一个术语,这取决于(另一幅图像的)亮度和 slider 。例如:
col_hsl2.z += (col1_intensity-constVal)*sSelectedIntensity1/(1.0-constVal);
如果你想改变亮度,我建议使用 HSL (hue, saturation, lightness)颜色范围而不是 HSV (hue, saturation, value .
与 HSV 相比,在 HSL 中,第三个值表示颜色的亮度:
const float Epsilon = 1e-10;
vec3 RGBtoHSL(in vec3 RGB)
{
vec4 P = (RGB.g < RGB.b) ? vec4(RGB.bg, -1.0, 2.0/3.0) : vec4(RGB.gb, 0.0, -1.0/3.0);
vec4 Q = (RGB.r < P.x) ? vec4(P.xyw, RGB.r) : vec4(RGB.r, P.yzx);
float C = Q.x - min(Q.w, Q.y);
float H = abs((Q.w - Q.y) / (6.0 * C + Epsilon) + Q.z);
vec3 HCV = vec3(H, C, Q.x);
float L = HCV.z - HCV.y * 0.5;
float S = HCV.y / (1.0 - abs(L * 2.0 - 1.0) + Epsilon);
return vec3(HCV.x, S, L);
}
vec3 HSLtoRGB(in vec3 HSL)
{
float H = HSL.x;
float R = abs(H * 6.0 - 3.0) - 1.0;
float G = 2.0 - abs(H * 6.0 - 2.0);
float B = 2.0 - abs(H * 6.0 - 4.0);
vec3 RGB = clamp( vec3(R,G,B), 0.0, 1.0 );
float C = (1.0 - abs(2.0 * HSL.z - 1.0)) * HSL.y;
return (RGB - 0.5) * C + HSL.z;
}
像这样使用函数:
void main ()
{
vec2 vTexCoord = vec2(vTexCoordIn.x,vTexCoordIn.y);
vec4 color1 = texture2D (sTexture1, vTexCoord);
vec4 color2 = texture2D (sTexture2, vTexCoord);
vec3 col1_hsl1 = RGBtoHSL(color1.rgb);
float col1_intensity = col1_hsl1.z;
float constVal = 0.8;
if (col1_intensity > constVal)
{
vec3 col_hsl2 = RGBtoHSL(color2.rgb);
col_hsl2.z += (col1_intensity-constVal)*sSelectedIntensity1/(1.0-constVal);
vec3 col_rgb = HSLtoRGB(col_hsl2.rgb);
color2 = vec4(col_rgb.rgb, color2.a);
}
gl_FragColor = color2;
}
另一种选择是根据其他图像的亮度修改整个图像的亮度。在这种情况下,不需要系数 0.8:
void main ()
{
vec2 vTexCoord = vec2(vTexCoordIn.x,vTexCoordIn.y);
vec4 color1 = texture2D (sTexture1, vTexCoord);
vec4 color2 = texture2D (sTexture2, vTexCoord);
vec3 col1_hsl1 = RGBtoHSL(color1.rgb);
float col1_intensity = col1_hsl1.z;
vec3 col_hsl2 = RGBtoHSL(color2.rgb);
col_hsl2.z += col1_intensity * sSelectedIntensity1;
vec3 col_rgb2 = HSLtoRGB(col_hsl2.rgb);
color2 = vec4(col_rgb2.rgb, color2.a);
gl_FragColor = color2;
}
另一个很好的效果可以通过照亮强度高于 0.8 的区域并使光线低于 0.8 的区域变暗来实现:
void main ()
{
vec2 vTexCoord = vec2(vTexCoordIn.x,vTexCoordIn.y);
vec4 color1 = texture2D (sTexture1, vTexCoord);
vec4 color2 = texture2D (sTexture2, vTexCoord);
vec3 col1_hsl1 = RGBtoHSL(color1.rgb);
float col1_intensity = col1_hsl1.z;
vec3 col_hsl2 = RGBtoHSL(color2.rgb);
float constVal = 0.8;
if (col1_intensity > constVal)
col_hsl2.z += (col1_intensity-constVal)*sSelectedIntensity1/(1.0-constVal);
else
col_hsl2.z += (col1_intensity-constVal)*sSelectedIntensity1/constVal;
vec3 col_rgb2 = HSLtoRGB(col_hsl2.rgb);
color2 = vec4(col_rgb2.rgb, color2.a);
gl_FragColor = color2;
}
有很多可能性,您必须选择最适合您需要的功能。
如果您想“调暗”图像,则必须根据“逆”因子或其他图像的亮度来操纵每个像素的亮度 (* (1.0 - col1_hsl1.z )
) 如果 slider 低于 0.5:
void main ()
{
vec2 vTexCoord = vec2(vTexCoordIn.x,vTexCoordIn.y);
vec4 color1 = texture2D (sTexture1, vTexCoord);
vec4 color2 = texture2D (sTexture2, vTexCoord);
vec3 col1_hsl1 = RGBtoHSL(color1.rgb);
float col1_intensity = col1_hsl1.z;
vec3 col_hsl2 = RGBtoHSL(color2.rgb);
if (sSelectedIntensity1 < 0.5)
col_hsl2.z *= (1.0 - col1_intensity * (1.0-2.0*sSelectedIntensity1));
else
col_hsl2.z += col1_intensity * (2.0*sSelectedIntensity1-1.0);
vec3 col_rgb2 = HSLtoRGB(col_hsl2.rgb);
color2 = vec4(col_rgb2.rgb, color2.a);
gl_FragColor = color2;
}
关于c# - 通过比较另一个图像的强度来改变图像的强度 - OpenTK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57622908/
我正在开发一个录音机应用程序。我想知道在录制音频时有什么方法可以找到音频的强度。我不想将录音保存在任何地方。我只想向用户展示麦克风捕捉到的声音是否大于预定义的阈值。 假设如果声音低于 2 分贝,它应该
我正在尝试让一个基本服务器(从 Beginning Python 复制)来发送一个 str。 错误: c.send( "XXX" ) TypeError: must be bytes or buffe
我陷入了一个问题,不知道去哪里看。我需要增加图像中特定颜色的强度,例如 R、G 或蓝色。当我这样做时,某些颜色无法正确呈现。 下面是我为测试拍摄的图像: 现在当我像绿色一样增加时: A = Color
我不希望我的背景图片太模糊。没有调整模糊强度的属性吗? let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.Light) blurEffect
我使用 OpenCV 2.4.11+Qt 并尝试制作视频并更改红色/蓝色或绿色 channel 的强度,但没有找到任何功能或设置来执行此操作。有谁知道如何做到这一点? 最佳答案 如果您只想更改一个特定
当我有 x、y、强度时,我不知道如何创建热图(或等高线图)。我有一个看起来像这样的文件: 0,1,6 0,2,10 .... 到目前为止: with open('eye_.txt', 'r') as
有谁有一些可以在 iPhone 应用程序中使用的代码,让我可以看到 wifi 的强度吗?我有一个连接密集型操作,并且希望它们不在不稳定区域 最佳答案 这可能会帮助您走上正确的道路...... http
当从 RGB 转换为灰度时,据说应该对 R、G 和 B channel 应用特定的权重。这些权重是:0.2989、0.5870、0.1140。 据说这是因为人类对这三种颜色的感知/感受不同。有时也有人
Eclipse SSH key 生成屏幕(常规 -> 网络连接 -> SSH2)生成 1024 位 RSA key ,该 key 太弱而无法使用 ( http://news.netcraft.com/
当从 RGB 转换为灰度时,据说应该对 R、G 和 B channel 应用特定的权重。这些权重是:0.2989、0.5870、0.1140。 据说这是因为人类对这三种颜色的感知/感受不同。有时也有人
我们的网络应用程序使用 the Vibrate API对于微妙的按钮按下效果: window.navigator.vibrate(5); 但在我的新手机上,感觉不那么微妙,更像是我的手机正试图从我手中
我的应用程序应扫描周围的 Wifi 信号并列出网络名称及其 RSSI。 我在谷歌上找不到任何关于如何做的线索。有人可以举个例子或者至少指出其他地方我可以找到答案吗? 最佳答案 我认为这不可能!不管是
所以我的图像有一些黑点,它们看起来很简单,所以我想我可以创建一个亮度图,将其反转,然后将其应用到我的图像以消除黑点。然而,我所能找到的只有两种均衡方法:均衡整个图像(使用直方图)或将图像分割成深色和浅
我是一名优秀的程序员,十分优秀!