将图像转换为灰度像素值的行
我想使用节点indico API 。 我需要将图像转换为灰度,然后转换为包含数组/像素值行的数组。 我从哪说起呢?
这些工具对图像采取特定格式,列表列表,每个子列表包含与图像中的n个像素相对应的“行”值。
eg [[float, float, float ... *n ], [float, float, float ... *n ], ... *n]
由于像素倾向于由RGBA值表示,因此可以使用以下公式转换为灰度。
Y = (0.2126 * R + 0.7152 * G + 0.0722 * B) * A
我们正在努力自动缩放图像,但目前是由您提供一个正方形的图像
看起来像node
的image processing工具可悲的是有点缺乏,但有一个很好的解决scheme。
get-pixels
允许从URL或从本地path读取图像,并将其转换为应该在API上非常出色的ndarray
。
API将以get-pixels
生成的格式接受RGB图像,但如果您仍然有兴趣将图像转换为灰度,这对其他应用程序可能会有所帮助,但实际上有点奇怪 。
在一个标准的RGB图像中,基本上每个颜色都有一个亮度分数,这就是颜色的亮度。 基于亮度,每个像素的灰度转换发生如下:
Grayscale = 0.2126*R + 0.7152*G + 0.0722*B
API很快也会支持直接使用URL,敬请关注。
我维护尖锐的 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 });