将大矩阵转换为灰度图像

发布于 2024-12-09 04:22:28 字数 223 浏览 1 评论 0原文

我有一个包含 3,076,568 个二进制值(1 和 0)的 NumPy 数组。我想将其转换为矩阵,然后在 Python 中转换为灰度图像。

但是,当我尝试将数组重塑为 1,538,284 x 1,538,284 矩阵时,出现内存错误。

如何减小矩阵的大小,使其变成适合屏幕的图像而不丢失唯一性/数据?

此外,我如何将其变成灰度图像?

任何帮助或建议将不胜感激。谢谢。

I have a NumPy array of 3,076,568 binary values (1s and 0s). I would like to convert this to a matrix, and then to a grayscale image in Python.

However, when I try to reshape the array into a 1,538,284 x 1,538,284 matrix, I get a memory error.

How can I reduce the size of the matrix so that it will turn into an image that will fit on a screen without losing the uniqueness/data?

Furthermore, how would I turn it into a grayscale image?

Any help or advice would be appreciated. Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

音盲 2024-12-16 04:22:28

你的“二进制值”数组是一个字节数组?

如果是这样,您可以在调整大小后执行(使用 Pillow):

from PIL import Image
im = Image.fromarray(arr)

然后 im.show() 来查看它。

如果您的数组只有 0 和 1(1 位深度或黑白),您可能需要将其乘以 255

im = Image.fromarray(arr * 255)

以下是一个示例:

>>> arr = numpy.random.randint(0,256, 100*100) #example of a 1-D array
>>> arr.resize((100,100))
>>> im = Image.fromarray(arr)
>>> im.show()

Random image

编辑(2018):

这个问题是在 2011 年写的,自从需要在加载时使用 mode='L' 参数后,Pillow 就发生了变化来自数组

另外在下面的评论中据说还需要 arr.astype(np.uint8) ,但我还没有测试过它

Your array of "binary values" is an array of bytes?

If so, you can do (using Pillow) after resizing it:

from PIL import Image
im = Image.fromarray(arr)

And then im.show() to see it.

If your array has only 0's and 1's (1-bit depth or b/w) you may have to multiply it to 255

im = Image.fromarray(arr * 255)

Here an example:

>>> arr = numpy.random.randint(0,256, 100*100) #example of a 1-D array
>>> arr.resize((100,100))
>>> im = Image.fromarray(arr)
>>> im.show()

Random image

Edit (2018):

This question was written in 2011 and Pillow changed ever since requiring to use the mode='L' parameter when loading with fromarray.

Also on comments below it was said arr.astype(np.uint8) was needed as well, but I have not tested it

伴梦长久 2024-12-16 04:22:28

使用 PIL 并不是真正需要的,您可以直接使用 pyplot 绘制数组(见下文)。要保存到文件,您可以使用 plt.imsave('fname.png', im)

在此处输入图像描述

下面的代码。

import numpy as np
import matplotlib.pyplot as plt

x = (np.random.rand(1754**2) < 0.5).astype(int)

im = x.reshape(1754, 1754)
plt.gray()
plt.imshow(im)

您还可以使用 plt.show(im) 在新窗口中显示图像。

Using PIL is not really needed, you can plot the array directly with pyplot (see below). To save to a file, you could use plt.imsave('fname.png', im).

enter image description here

Code below.

import numpy as np
import matplotlib.pyplot as plt

x = (np.random.rand(1754**2) < 0.5).astype(int)

im = x.reshape(1754, 1754)
plt.gray()
plt.imshow(im)

You can also use plt.show(im) to display image in new window.

呆萌少年 2024-12-16 04:22:28

您可以使用 来执行此操作scipy.misc.toimageim.save("foobar.png")

#!/usr/bin/env python

# your data is "array" - I just made this for testing
width, height = 512, 100
import numpy as np
array = (np.random.rand(width*height) < 0.5).astype(int)
array = array.reshape(height, width)

# what you need
from scipy.misc import toimage

im = toimage(array)
im.save("foobar.png")

给出

在此处输入图像描述

You can do so with scipy.misc.toimage and im.save("foobar.png"):

#!/usr/bin/env python

# your data is "array" - I just made this for testing
width, height = 512, 100
import numpy as np
array = (np.random.rand(width*height) < 0.5).astype(int)
array = array.reshape(height, width)

# what you need
from scipy.misc import toimage

im = toimage(array)
im.save("foobar.png")

which gives

enter image description here

氛圍 2024-12-16 04:22:28

例如,如果您的 PC 中有一个包含一些数据(图像)的 txt 文件,为了将此类数据可视化为灰度图像,您可以使用以下命令:

with open("example.txt", "r") as f:
data = [i.strip("\n").split() for i in f.readlines()]
data1 = np.array(data, dtype=float)
plt.figure(1)
plt.gray()
plt.imshow(data1)
plt.show()

If you have as example a txt file in your PC with some data (an image), in order to visualize such data as gray scale image you can use this:

with open("example.txt", "r") as f:
data = [i.strip("\n").split() for i in f.readlines()]
data1 = np.array(data, dtype=float)
plt.figure(1)
plt.gray()
plt.imshow(data1)
plt.show()
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文