1

数字 5 单色图像

如何将示例单色图像转换为 ruby​​ 中的二维数组。

[[0, 0, 0, 0, 0],
 [0, 1, 1, 1, 1],
 [0, 1, 1, 1, 1],
 [0, 0, 0, 0, 1],
 [0, 1, 1, 1, 0],
 [1, 1, 1, 1, 0],
 [0, 1, 1, 1, 0],
 [0, 1, 1, 1, 0],
 [1, 0, 0, 0, 1]]

我曾尝试过使用 pycall 插件。但是,在 Rails 控制台中执行时,我不得不再次手动导入。Pycall 有时不起作用。

require 'pycall'
require 'pycall/import'
include PyCall::Import

pyimport 'numpy', as: :np
pyimport 'PIL.Image', as: :pil_image

image = pil_image.open.(image_path).convert.('1')
img = np.asarray.(image, dtype: np.uint8)
list = img.tolist.().map { |l| l.to_a }
4

1 回答 1

0

RMagick 提供了几个解决方案。使用get_pixels获取Pixel对象的数组。像素对象是可以从中获取红色、绿色和蓝色通道值的结构。因为图像是单色的,所以通道值将是 0 或QuantumRange。通过 QuantumRange 缩放值以强制它们为 0 或 1。

或者,使用export_pixels。同样,通过 QuantumRange 缩放返回值以获得 0 或 1。

无论哪种情况,您都可以通过对图像的连续子集(例如单行)进行操作来最小化存储需求(如果您的图像很大)。

于 2017-06-17T15:19:25.383 回答