从图像文件创建颜色直方图

Create a colour histogram from an image file

我想使用 Nim 检查我的 Puppeteer 测试 运行 执行的结果。 最终结果的一部分是屏幕截图。该屏幕截图应包含一定数量的活动颜色。活动颜色为橙色、蓝色、红色或绿色。它们表示 activity 存在于传入数据中。黑色、灰色、白色需要排除,它们只代表静态数据。

我还没有找到可以使用的解决方案。

import stb_image/read as stbi

var
  w, h , c:int
  data: seq[uint8]
  cBin: array[256,int] #colour range was 0->255 afaict
data = stbi.load("screenshot.png",w,h,c,stbi.Default)
for d in data:
  cBin[(int)d] = cBin[(int)d] + 1
echo cBin

现在我有一个 uint 数组,我可以用它来构建值的直方图,但我不知道如何将它们映射到 RGB 值之类的东西。有人指点吗?

有没有更好的包自动有这个,我没找到。

stbi.load() 将 return 一系列交错的 uint8 颜色分量。交错分量的数量由 c(即 channels_in_file)或非零时的 desired_channels 决定。

例如channels_in_file == stbi.RGB and desired_channels == stbi.Default时有红、绿、蓝3个交错分量

[
# r    g    b
  255, 0,   0,   # Pixel 1
  0,   255, 0,   # Pixel 2
  0,   0,   255, # Pixel 3
]

您可以像这样处理上面的内容:

import colors
for i in countUp(0, data.len - 3, step = stbi.RGB):
  let
    r = data[i + 0]
    g = data[i + 1]
    b = data[i + 2]
    pixelColor = colors.rgb(r, g, b)
  echo pixelColor

您可以在 stb_image.h 的评论中阅读更多相关信息。