【问题标题】:Display and Save Large 2D Matrix with Full Resolution in Python在 Python 中以全分辨率显示和保存大型 2D 矩阵
【发布时间】:2014-01-23 13:12:40
【问题描述】:

我有一个保存为 numpy 数组的大型二维数组 (4000x3000),我想显示和保存它,同时保持查看每个单独像素的能力。 对于显示部分,我目前使用 matplotlib 的 imshow() 函数,效果很好。

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

fig = pylab.figure(figsize=(16,12))
pylab.imshow(arr,interpolation='nearest')
fig.savefig("image.png",dpi=500)

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

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

非常感谢您对此主题的任何帮助!

【问题讨论】:

  • 您需要保存图像,还是可以只保存数组数据本身并稍后重新创建图像?
  • 我需要保存图像并且图像中的所有像素信息都清晰可见

标签: python image matplotlib resolution large-data


【解决方案1】:

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

import cv2
cv2.imwrite('image.png', arr)

arr 是你的 numpy 数组。保存的图像将与您的数组arr 大小相同。

您没有提及您正在使用的颜色模型。 Png 与 jpeg 一样,通常每个颜色通道为 8 位。如果您要求,OpenCV 将支持每个通道最多 16 位。

OpenCV 的 imwrite 文档是 here

【讨论】:

  • 我对颜色编码没有严格的限制。每种颜色 8 位就可以满足我的目的。感谢您指出 OpenCV,我一直在努力将其安装在 OS X (Snow Leopard) 上,但会继续尝试。我希望有一个不涉及安装单独模块的解决方案,但如果可行,那暂时可以解决问题。
【解决方案2】:

我想我找到了一个效果很好的解决方案。我使用 figimage 绘制 numpy 数组而不重新采样。如果您对创建的图形的大小非常小心,则无论其大小如何,您都可以保持矩阵的全分辨率。

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

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")

这个选项我仍然有两个问题:

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

如果存在,同时解决上述 2 个问题的解决方案将非常棒。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 1970-01-01
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多