【问题标题】:Converting an image to rows of grayscale pixel values将图像转换为灰度像素值行
【发布时间】:2015-03-20 21:41:23
【问题描述】:

我想使用node indico API。我需要将图像转换为灰度,然后转换为包含像素值数组/行的数组。我从哪里开始?

这些工具采用特定格式的图像,列表列表,每个 包含对应于 n 个像素的“行”值的子列表 图片。

e.g. [[float, float, float ... *n ], [float, float, float ... *n ], ... *n]

由于像素往往由 RGBA 值表示,因此您可以使用 下面的公式转换为灰度。

Y = (0.2126 * R + 0.7152 * G + 0.0722 * B) * A

我们正在努力自动缩放图像,但目前它是 由您提供方形图像

【问题讨论】:

    标签: node.js indico


    【解决方案1】:

    貌似node的图片处理工具有点欠缺,但是有一个很好的解决方案。

    get-pixels 允许从 URL 或本地路径中读取图像,并将其转换为应该非常适合 API 的 ndarray。

    API 将接受 get-pixels 生成格式的 RGB 图像,但如果您仍然有兴趣将图像转换为灰度,这对其他应用程序很有帮助,它实际上是 little strange。

    在标准 RGB 图像中,基本上每种颜色都有一个亮度分数,即颜色的亮度。根据亮度,每个像素的灰度转换如下:

    Grayscale = 0.2126*R + 0.7152*G + 0.0722*B
    

    很快 API 也将支持直接使用 URL,敬请期待。

    【讨论】:

      【解决方案2】:

      我维护了 sharp Node.js 模块,它可能会让你更接近你的需要。

      以下示例将input 转换为灰度并生成Buffer 整数值,每个像素一个字节。

      您需要添加除以 255 的逻辑以转换为浮点数,然后拆分为数组数组以保持 Indico API 的正常运行。

      sharp(input)
        .resize(width, height)
        .grayscale()
        .raw()
        .toBuffer(function(err, data) {
          // data is a Buffer containing uint8 values (0-255)
          // with each byte representing one pixel
        });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-11-28
        • 2017-04-05
        • 2011-12-15
        • 2010-11-20
        相关资源
        最近更新 更多