例如,我使用matplotlib绘制图形如下:
public class OverflowedByte {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int limit = scan.nextInt();
int countOverflows = 0;
for (byte i = -128; i < limit; i++) {
if (i == Byte.MAX_VALUE) {
countOverflows++;
i = Byte.MIN_VALUE;
System.out.println(countOverflows);
}
}
}
}
如果我使用:
plt.figure(figsize=(10,10))
plt.imshow(output_fig, zorder=0,cmap="gray")
plt.scatter(x,y,color='k')
我将它保存为图形文件。但是,我想将它保存到矩阵或numpy数组中,这样每个元素都可以保存图中每个像素的比例值。 我怎样才能做到这一点? 我找到了保存RGB值的解决方案。但我希望能保存一个灰度数字。 谢谢大家的帮助!
答案 0 :(得分:5)
一旦你有一个绘图数据(自包含的例子如下):
import numpy as np
import matplotlib.pyplot as plt
from skimage import data, color
img = data.camera()
x = np.random.rand(100) * img.shape[1]
y = np.random.rand(100) * img.shape[0]
fig = plt.figure(figsize=(10,10))
plt.imshow(img,cmap="gray")
plt.scatter(x, y, color='k')
plt.ylim([img.shape[0], 0])
plt.xlim([0, img.shape[1]])
可以使用fig.canvas
(matplotlib的画布)将基础数据恢复为数组。首先触发它的绘图:
fig.canvas.draw()
以数组形式获取数据:
width, height = fig.get_size_inches() * fig.get_dpi()
mplimage = np.fromstring(fig.canvas.tostring_rgb(), dtype='uint8').reshape(height, width, 3)
如果您希望阵列与原始图像的形状相同,则必须使用figsize
的{{1}}和dpi
属性进行播放。
最后,如果您想要灰度图,则matplotlib会返回RGB图像:
plt.figure()