在Python中以全分辨率显示和保存大型2D矩阵

在Python中以全分辨率显示和保存大型2D矩阵,python,image,matplotlib,resolution,large-data,Python,Image,Matplotlib,Resolution,Large Data,我有一个大的2D数组(4000x3000)保存为numpy数组,我想显示和保存它,同时保持查看每个像素的能力。 对于显示部分,我目前使用matplotlib imshow()函数,该函数工作得非常好 对于保存部分,我不清楚如何保存此图形并保存所有1200万像素中包含的信息。我尝试调整已保存图像的体形大小和分辨率(dpi),但不清楚应该使用哪些figsize/dpi设置来匹配显示的大2D矩阵的分辨率。下面是我正在做的一个示例代码(arr是形状的numpy数组(30004000)): 一种选择是大幅

我有一个大的2D数组(4000x3000)保存为numpy数组,我想显示和保存它,同时保持查看每个像素的能力。 对于显示部分,我目前使用matplotlib imshow()函数,该函数工作得非常好

对于保存部分,我不清楚如何保存此图形并保存所有1200万像素中包含的信息。我尝试调整已保存图像的体形大小和分辨率(dpi),但不清楚应该使用哪些figsize/dpi设置来匹配显示的大2D矩阵的分辨率。下面是我正在做的一个示例代码(arr是形状的numpy数组(30004000)):

一种选择是大幅提高保存图像的分辨率,以确保所有像素都被正确记录,但这有一个显著的缺点,即创建一个非常大的图像(至少比我真正需要的4000x3000像素图像大得多)。它还有一个缺点,即并非所有像素的大小都完全相同

我还查看了Python图像库,但我不清楚如何将其用于此目的(如果有的话)


在此问题上的任何帮助都将不胜感激

OpenCV库是为科学分析图像而设计的。因此,如果您没有明确要求,它不会“重新采样”图像。要保存图像,请执行以下操作:

import cv2
cv2.imwrite('image.png', arr)
其中
arr
是您的numpy数组。保存的图像将与阵列的大小相同
arr

你没有提到你正在使用的颜色模型。PNG和JPEG一样,通常是每个颜色通道8位。如果您要求,OpenCV将支持每个通道最多16位


OpenCV的imwrite文档是。

我想我找到了一个相当好的解决方案。我使用figimage绘制numpy数组,无需重新采样。如果你对你创建的图形的大小很小心,你可以保持矩阵的完全分辨率,不管它有多大

我发现figimage绘制了一个大小为0.01英寸的单个像素(这个数字可能取决于系统),因此下面的代码将以全分辨率保存矩阵(arr是形状的numpy数组(30004000)):

对于此选项,我还有两个问题:

  • 没有指示列/行号的标记,因此除了边缘上的像素外,很难知道哪个像素是哪个像素
  • 如果决定以交互方式查看图像,则无法放大/缩小

  • 如果有解决上述两个问题的解决方案,那就太好了。

    您需要保存图像,还是只保存阵列数据本身,然后重新创建图像?我需要保存图像,并且图像中的所有像素信息都清晰可见。我对颜色编码没有太大的限制。对我来说,每种颜色8位就可以了。感谢您指出OpenCV,我一直在努力将其安装到OSX(雪豹)上,但会继续尝试。我更希望有一个解决方案,不涉及安装单独的模块,但如果这是可行的,可以做的技巧暂时。
    import cv2
    cv2.imwrite('image.png', arr)
    
    rows = 3000
    columns = 4000
    fig = pylab.figure(figsize=(columns*0.01,rows*0.01))
    pylab.figimage(arr,cmap=cm.jet,origin='lower')
    fig.savefig("image.png")