我想使用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
我们正在努力自动缩放图像,但目前正是如此 由您提供方形图像
答案 0 :(得分:4)
看起来node
的图像处理工具有点遗憾,但有一个很好的解决方案。
get-pixels
允许从网址或本地路径中读取图片,并将其转换为适用于API的ndarray
。
API将接受get-pixels
生成它们的格式的RGB图像,但如果您仍然有兴趣将图像转换为灰度图像,这对其他应用程序有帮助,它实际上是有用的一个little strange。
在标准RGB图像中,基本上为每种颜色赋予了亮度分数,这是颜色出现的亮度。根据亮度,每个像素的灰度转换如下:
Grayscale = 0.2126*R + 0.7152*G + 0.0722*B
API很快也会支持直接使用网址,敬请关注。
答案 1 :(得分:3)
我维护sharp Node.js模块,可以让你更接近你需要的东西。
以下示例将input
转换为灰度并生成Buffer
整数值,每像素一个字节。
你需要添加逻辑除以255以转换为float然后拆分成数组数组以保持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
});