问题标签 [srgb]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1483 浏览

python - 在 Numpy 中正确地将 sRGB 向量化为线性转换

在我的图像编辑应用程序中,我具有将 32 位浮点图像从 sRGB 转换为线性色彩空间的功能。公式为:

我的图像是一个名为img32的三维numpy.ndarray

到目前为止我的实现:

所以,我正在创建一个新的数组boolarray,其真值为 <= 0.04045 并乘以它。

什么是更好的解决方案?

我试过类似的东西:

这在第一步有效,但在第二步失败:

可能是因为它在包裹在np.power函数中时不起作用

任何帮助表示赞赏。

0 投票
2 回答
6873 浏览

adobe - 数学转换 sRGB 和 Adob​​eRGB

这是一个非常明确的问题,但我已经做了很多研究并没有找到答案。StackOverflow 问题,因为thisthis是关于 jpeg 转换的。是关于 python 内置库的。

那么,如何将 sRGB 转换为 Adob​​eRGB,反之亦然???我的意思是一个数学函数,它将 3 个字节转换为 3 个字节。没有jpges,等等。只是使用笔和纸转换颜色的数学函数。

是的,photoshop 确实做到了,而且有一些奇怪的在线计算器显示了另一个结果。

为什么我在 google 中找不到简单的公式?

我开始思考,我什么都不知道,我的问题没有直接的答案。

如果有人可以描述,发生了什么或给出公式,我将非常感激。

更新

整数 rgbs 的大量结果也将是正确答案。

0 投票
1 回答
4400 浏览

image - Delphi TImage:如何显示大于它们正在加载或分配给的 TImage 组件的图像?

TImageDelphi 的控件中不显示某些具有以下格式的 JPEG 文件。

并将速度与我现有的灰度代码进行比较。他们使用的扫描线过程似乎比我目前使用的扫描线过程要快一些。对于使用图像的人来说,这是一个很好的起点。当我遇到问题并注意到文件大小时,我添加了标准的 jpeg 转换代码和滚动框。我相信这个问题是有效的,但我改写了它。如果我找到另一个更容易找到问题的相关答案,我会拉这个帖子。如果没有,我会离开它。

例如,来自尼康数码相机。

尺寸:宽度 5184 x 高度 3888
垂直分辨率:300 dpi
颜色表示:sRGB
压缩位/像素:2
位深度:24
EXIF 版本:0230
属性:N

从三星手机相机:

尺寸:宽 4128 x 高 2322
水平和垂直分辨率:72 dpi
颜色表示:sRGB
分辨率单位:2
压缩位/像素:[空白]
位深:24
EXIF 版本:0220
属性:A

Adobe Photoshop 的灰度文件:

尺寸:宽度 1800 x 高度 3600
水平和垂直分辨率:300 dpi
颜色表示:未校准
压缩位/像素:[空白]
位深度:8
EXIF 版本:[空白]
属性:A

与最后一个格式完全相同但尺寸小得多的文件可以工作。

一个工作文件的尺寸:宽 570 x 高 248

具有 24 位深度、较小尺寸且没有分辨率或压缩设置的文件也可以正常工作。

当我尝试使用下面的代码显示图片时,失败文件上的图片总是空白,并且没有返回错误。它与许多其他文件完美jpg配合bmp

sRGB 格式的文件是否需要转换?控件可以在屏幕上显示的内容是否有大小限制?如果是这样,有没有办法显示更大的文件?

0 投票
1 回答
356 浏览

android - OpenGL ES 3 中带有 GL_SRGB8 的 glGenerateMipmap 导致黑色纹理

我在 Android 上使用 OpenGL ES 3,我正在尝试加载 sRGB 纹理并为其生成 mipmap。我使用 GL_SRGB8 作为内部格式,使用 glGenerateMipmap(GL_TEXTURE_2D) 生成 mipmap,并使用 GL_LINEAR_MIPMAP_LINEAR。当我尝试使用它时,它会绘制黑色纹理。

如果我改用 GL_RGB8,它可以工作。如果我不尝试使用 mipmap,则 GL_SRGB8 可以工作。我还在桌面 OpenGL 上运行了相同的代码,它也可以工作。有没有办法让它在 OpenGL ES 中工作?

0 投票
1 回答
496 浏览

c++ - 为什么只有在 SDL2 中设置非零 alpha 大小时才能获得 sRGB 帧缓冲区?

我正在尝试按照本指南并查阅有关如何在默认帧缓冲区上启用 SRGB 支持的 SDL2 文档,以正确的方式渲染典型的 OpenGL 颜色三角形。

这是我写的代码,它绘制了三角形:

我在 Ubuntu 16.04(带有 HWE 驱动程序)上运行,并且我使用的机器具有 Intel HD 4000 GPU 和带有 Optimus 的专用 nvidia GPU。理论上,我应该得到一个 sRGB 帧缓冲区。但是,只有在 nvidia GPU 下运行或使用 ApiTrace 时,我才会获得 sRGB 帧缓冲区。如果我在 Intel GPU 下运行,如果我使用 SDL2 指定非零 alpha 大小,我只会得到一个 sRGB 帧缓冲区。如果我为 alpha 指定一个零大小(或根本不指定一个),我将得到一个线性帧缓冲区。

这是我的示例在 nvidia GPU(以及具有非零 alpha 位大小的 Intel GPU)下运行时的样子: 具有非零 alpha 位大小的 nvidia GPU 和 Intel GPU

这是在具有零 alpha 位大小(sRGB 不正确)的 Intel GPU 下运行时的外观: 具有零 alpha 位大小的英特尔 GPU

这就是我通过 ApiTrace 得到的: ApiTrace

我也跑glxinfo -t了,据我所知,即使设置了零 alpha 位,我也应该获得 sRGB 支持(编辑:不是这种情况。glxinfo应该在 sRGB 列中显示ses 的输出,但由于某种原因不会发生这种情况或其他):

在这种情况下,为什么我没有获得 sRGB 帧缓冲区?有没有可能我遇到了英特尔驱动程序错误?

0 投票
1 回答
114 浏览

image - 伽玛校正和亮度掩蔽

根据韦伯定律,delta(L)/L 是一个常数,其中 L 是以坎德拉/m2 为单位测量的亮度,即 (L2 - L1)/L1。这意味着较低亮度范围(较暗)的微小变化在感知上远大于较高亮度范围(较亮)的微小变化。

我们存储的 sRGB 图像经过伽马校正,即它们首先经过非线性传递函数,该函数也部分模拟了人类的感知。

我想知道伽马校正后亮度掩蔽会发生什么?韦伯定律是否仍然适用于这些 sRGB 图像,或者它们在感知上是否一致,即像素值的 1 个单位的差异在较暗区域或较亮区域中是否相同?换句话说,delta(L) 是伽马校正图像中的常数,其中 L 是伽马校正像素值。

0 投票
0 回答
249 浏览

image - WebP 实现了什么颜色模型?

它本身是否支持 sRGB?当您使用libwebpAPI 加载和保存图像数据时,您假设是线性还是 sRGB 编码数据?有没有办法表明你想要 sRGB 数据?

它本身是否支持关联的 alpha?当您使用libwepbAPI 加载和保存图像数据时,您是假设未关联还是关联的 alpha?例如,如果我有一个包含关联 alpha 的像素缓冲区,是否需要在保存之前将其转换为非关联 alpha libwebp

0 投票
0 回答
1046 浏览

python - Blender python将颜色转换为255比例

我正在做一些搅拌机脚本 atm。我有一个与 numpy 和 opencv 一起使用的 python 脚本来进行一些图像处理,我想在搅拌机中使用该脚本。主要问题是,当我从搅拌机读取图像时,它带有 sRGB 中的像素值。OpenCV 对 sRGB 不好,因此我无法正确使用它。

我需要一种将这些 sRGB 像素转换为 255 比例的 RGB 或 HEX 的方法。我已经在网上彻底检查过,除了 sRGB 到线性 RGB 函数之外,找不到与此转换相关的太多内容,这只会使数字小得多。最初我认为搅拌器将像素存储在 [0,1) 范围内,只需乘以就可以转换为 [0,255],但我错了,因为这不起作用。

如果熟悉 sRGB 的人可以解释您如何从这些小值转换为 HEX 代码或 255 比例的 RGB 值,那就太好了。

谢谢!

原始图像: 原始 pix 一些代码示例:转换为具有 shape(w,h,3) 的 numpy 数组也乘以 255

图像现在看起来像这样: 转换为 opencv 可读格式后

该函数旨在将 sRGB 转换为线性 RGB:

应用函数后:

生成的图像是全黑的。

0 投票
2 回答
908 浏览

opengl - 8bit sRGB 和 OpenGL 混淆

我想澄清一下 sRGB 颜色空间及其在 OpenGL 中的每通道 8 位表示。在深入研究该主题后,我发现将图像存储在 sRGB 中只是为了补偿监视器所做的相反伽马操作,该操作出于兼容性原因“模仿”了旧 CTR 本质上所做的操作。人眼具有类似非线性响应的事实只是一个巧合,与伽马校正无关(正如许多令人困惑的文章声称的那样),因为无论如何输出将再次是线性的

假设这种理解是正确的,在 OpenGL 中我们有 GL_SRGB8_ALPHA8 格式的纹理,每个通道有 8 位。然而,由于 0~255 的范围与线性 RGB 纹理相同,这是否意味着要将每通道 8 位的线性纹理转换为 sRGB,颜色值保持不变,一个简单的“标志”告诉 OpenGL:看这个 0~255范围不是线性的,所以将它们解释为曲线?每个通道的 sRGB 16 位图像(例如 16 位 PNG)怎么样?

0 投票
1 回答
668 浏览

android - 在将图像发送到设备之前,我是否需要从图像中删除 p3 色域?

我有一个存储用户图像的网络服务器,我需要知道如何存储每个图像(即:)my problem is to know if I need to store each picture with or without color space profile

我不太了解色彩空间配置文件的工作原理。我知道 android < Oreo 仅支持 sRGB,但 android device < Oreo 是否能够将例如 P3 Color Space 转换为 sRGB ?还是我绝对需要只向这些设备发送 sRGB 图片?我知道例如 Instagram 或 500px 将每张图片存储在两种变体中:有颜色配置文件和没有颜色配置文件,但这意味着使用两次存储:(

之后如何有效地将 P3 颜色空间转换为 sRGB?