【发布时间】:2019-04-21 04:38:42
【问题描述】:
我在 HTML5 画布中有一个 28x28 像素大小的图像。我使用以下代码将画布的 imageData 作为 RGBA(红色、绿色、蓝色、alpha)值的数组:
canvas = document.getElementById('canvas');
ctx = canvas.getContext("2d");
imgData = ctx.getImageData(0, 0, 28, 28);
现在我想对图像进行灰度化处理,以便得到一个包含 784 个值(28x28 像素)的数组,其中每个像素都有一个值(而不是四个)。
我发现了很多不同的灰度化公式,有些是乘以 rgb 值,有些只是计算平均值 - 我真的不知道该使用哪一个...
我还坚持获取 784 个值 - 它始终是 3136(因为有 4 个通道)...
提前致谢!
【问题讨论】:
-
是的,有多个公式,你需要选择一个。没有一个真正的公式。
-
好的,谢谢,但是在对每个像素有四个值的数组进行灰度化后,如何获得一个包含 784 个值的数组?
-
在你的四个循环中,只有两个计数器 - 一个
i += 1,一个j += 4每次迭代。 -
完美!带有两个计数器的 for 循环工作得很好(我知道为什么我自己没有想出这个)-谢谢!
-
这不是 OP 所追求的,因此不是对这个问题正文的回答,但对于标题,请注意 CSS 过滤器已添加到 Canvas2D API,并且在支持浏览器中,您可以通过简单地将上下文的过滤器设置为
"grayscale(100%)"来实现灰度效果,然后使用“复制” globalCompositeOperation 模式在其自身上绘制画布。
标签: javascript html canvas grayscale imagedata