- 已关闭**。此问题需要details or clarity。当前不接受答案。
- 想要改进此问题?**添加详细信息并通过editing this post阐明问题。
16小时前关门了。
Improve this question
我正在做一个项目,我有一个用户的图像,格式是data:image/png,我需要一个28x28的图像,我正在尝试将用户的280x280图像转换成28x28,然后转换成一个784x1的数组。
我试过很多软件包,似乎都不起作用。
16小时前关门了。
Improve this question
我正在做一个项目,我有一个用户的图像,格式是data:image/png,我需要一个28x28的图像,我正在尝试将用户的280x280图像转换成28x28,然后转换成一个784x1的数组。
我试过很多软件包,似乎都不起作用。
1条答案
按热度按时间t98cgbkg1#
如果你在浏览器环境中,有一个描述图像的
data:
URL,你不需要一个包。i = new Image()
、i.addEventListener("load", listener)
、i.src = 'data:...'
的图像。listener
中,创建一个canvas = new HTMLCanvasElement()
,并将其尺寸(width
,height
)设置为28 x28。该元素不需要在文档中,我们只需要使用它来绘制东西。ctx = canvas.getContext("2d")
以获取2D绘图画布。ctx.fillRect(0, 0, 28, 28)
将画布填充为纯色,以防用户的图像包含您不关心的alpha通道(如果您不喜欢黑色,请先设置fillColor
)。ctx.drawImage(i, 0, 0, 28, 28)
将原始图像绘制到上下文中。ctx.getImageData(0, 0, 28, 28)
以获取描述图像的ImageData对象。data
现在是一个28 * 28 * 4 = 3136字节的数组,按RGBARGBARGBA...顺序排列。(28 * 28 * 1)字节,因此选择通道(0,1,2),并以该偏移量和跨距4复制到784字节的Uint8ClampedArray
,或者每3个字节取平均值以获取RGB图像数据的惰性灰度。(要获得更正确的灰度,请使用v = 0.299 * r + 0.587 * g + 0.114 * b
作为YUV亮度刻度。)(既然你提到你正在使用Tensor,而且28 x28听起来很像MNIST图像,如果它看起来像是白色的,你可能想添加额外的逻辑来反转灰度; MNIST图像是黑底白字的,如果它们不一样,你会得到奇怪的结果。)