获取numpy数组值网格的矩阵图像,其中包含像素值(不是颜色)

2024-04-16 04:46:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我在网上搜索了一下,没有找到任何我想要的。在

我想把一个numpy数组保存为一个图像,但是我不想有一个彩色的图像,我想要一个像素值在其相应网格位置的黑白表示。在

例如:

import numpy as np
x = np.array([[1,2],[3,4]])
print(x)
# [[1 2]
#  [3 4]]

我想将此保存为图像(.PNG),如下所示:

expected output

我当前的代码创建了一个网格,并将数字放在里面,但很难调整所有内容,使其在研究论文中呈现出来。在

因此,与其发布我过于复杂的代码,我想知道是否有一个内置函数可以在几行代码中处理这些问题。在


Tags: 代码图像importnumpy网格内容pngas
3条回答

这可能有助于:

from matplotlib import pyplot as plt
import numpy as np

w  = 10
h  = 10 
img = np.random.randint(255, size=(w, h))
plt.figure(figsize=(5,8))
plt.imshow(img, interpolation='nearest')
plt.axis('off')

cellTextimg =  []
for j in range(0,h):
    cellTextimg.append(img[j,:])

the_table = plt.table(cellText= cellTextimg, loc='bottom')

您可以使用matplottable函数来绘制简单表。此外,还可以将绘图保存为PNG。 下面是满足您需求的简单代码:

import numpy as np
import matplotlib.pyplot as plt

x = np.array([[1,2],[3,4]])

plt.figure()
plt.table(cellText=x,cellLoc='center',loc='center')
plt.axis('off')
plt.savefig('table.png')

可以通过更改figsize行中的figsize参数来调整绘图或图像的大小:plt.figure(figsize=(x,y))

为了更好的外观,可以修改如下:

^{pr2}$

我将使用LaTeX生成表,因为它们看起来很花哨,您可以生成图像,也可以直接将它们放入文档中。我使用了以下代码来实现这一点:

#!/usr/bin/env
import numpy as np
import os

x = np.array([[1,2],[3,4]])

def generateLatexTable(x):
    start = [r'\documentclass[preview]{standalone}', r'\begin{document}', r'\begin{tabular}{%s}' % ('{1}{0}{1}'.format('|'.join(['r'] * x.shape[1]), '|')), r'\hline']
    tab = [' & '.join(['%d' % val for val in row]) + r' \\ \hline' for row in x]
    end = [r'\end{tabular}', r'\end{document}']
    text = '\n'.join(start + tab + end)

    return text

with open('table.tex', 'w') as f:
    f.write(generateLatexTable(x))
os.system("pdflatex table.tex")

在这里,使用document类preview,它返回一个调整为文档内容大小的图像,即仅返回表。只有tabular环境用于显示数据。单元格之间有水平条和竖线,但很容易改变这种情况。在变量tab中,为每一行处理数据并将其转换为字符串。请注意,您必须在此位置指定输出格式。我将它设置为%d,这样所有的东西都被转换成整数。在

如果您想在latex源代码中直接使用该表,则必须删除documentclass和{},以及{}和{}变量中的\end{document}。最后,所有的东西都放在一个乳胶源中,然后以table.tex的形式存储到磁盘上。如果您只希望图像结束,则生成的文件将编译为table.pdf。在

下面是输出的样子。但是就像我说的,因为它是乳胶,所以很容易改变外观:)

table

下面是另一个大矩阵(14 x 14)的示例,其中填充了0到100之间的随机数:

table2

相关问题 更多 >