如何在不同显示器分辨率下从图像重塑 numpy 数组

How to reshape numpy array from image on different monitor's resolution

我有代码:

def get_image_array(data):
    fig = plt.figure(figsize=(1.5, 1.5), dpi=100)
    plt.plot(data, '-o', c='r')
    plt.axis('off')
    fig.canvas.draw()

    img_arr = np.frombuffer(fig.canvas.tostring_rgb(), dtype=np.uint8)
    img_arr = img_arr.reshape(fig.canvas.get_width_height()[::-1] + (3,)).astype(np.float32)
    img_arr = img_arr[None, :]
    plt.close()

    return img_arr

我在其中创建图形大小为 150x150 (RGB) 的图形,将其转换为 numpy 数组以便在 CNN 模型中使用。我在 FullHD 显示器上启动它并且它可以工作,但它在 2k、4k 显示器上不起作用。这 错误是:

ValueError: cannot reshape array of size 270000 into shape (150,150,3)

如何为不同类型的分辨率创建尺寸为 150x150 的图形?

Reshape 只是重新配置现有信息,因此如果您有 67500 个数据点 (150*150*3),您可以将其作为一个长数组,或者您可以将其嵌套为 (150,150,3)(22500,3) 等等在。但是,如果您想获得更大的分辨率,您需要的信息比现有的更多,因此您需要弥补。

就像您可以将像素的大小加倍以覆盖 4 个像素而不是 1 个像素,或者您可以多次复制数组,或者可以用 0 或其他值填充它。有类似 numpy.resize 的功能,但您应该事先检查您实际想要的功能。

通常反过来更容易,即从高清图像开始,然后将其调整为更小。在那种情况下,您会在重新缩放时丢失信息,因此您不必弥补。