如何在 ruby 中将单色图像转换为二维数组
How to convert a monochrome image to 2d array in ruby
digit 5 monochrome image
如何将示例单色图像转换为 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 }
RMagick 提供了几个解决方案。使用 get_pixels to get an array of Pixel objects. Pixel objects are structures from which you can get the values of the red, green, and blue channel. Because the image is monochrome the channel values will either be 0 or QuantumRange。按 QuantumRange 缩放值以强制它们为 0 或 1。
或者,使用 export_pixels。同样,按 QuantumRange 缩放返回值以获得 0 或 1。
在任何一种情况下,您都可以通过对图像的连续子集(例如单行)进行操作来最小化存储需求(如果您的图像很大)。
digit 5 monochrome image
如何将示例单色图像转换为 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 }
RMagick 提供了几个解决方案。使用 get_pixels to get an array of Pixel objects. Pixel objects are structures from which you can get the values of the red, green, and blue channel. Because the image is monochrome the channel values will either be 0 or QuantumRange。按 QuantumRange 缩放值以强制它们为 0 或 1。
或者,使用 export_pixels。同样,按 QuantumRange 缩放返回值以获得 0 或 1。
在任何一种情况下,您都可以通过对图像的连续子集(例如单行)进行操作来最小化存储需求(如果您的图像很大)。