【问题标题】:How to Convert a "matrix" to an "image"?如何将“矩阵”转换为“图像”?
【发布时间】:2019-03-26 07:36:39
【问题描述】:

我有一个列表“L”。我想使用这个数字列表为图像创建地图。所以我先创建一个矩阵“n”,类似于输入Image的大小——2084、2084

L = [234, 78, 56, 98, 555, 876, 998 ...] 
n = np.zeros((2084, 2084), dtype = "uint8")

这给了我一个大小为 2084 x 2084 的矩阵。现在我将它展平以从中创建一个数组。

j = n.flatten()

因为我想为此创建一个灰度图像并将列表“L”中给出的该图像中的位置替换为白色。我将数组中的 0 替换为 255

for i in L:
  j[i] = 255

在此之后,我将数组重塑为矩阵形式。

 o  = np.reshape(j, (2084, 2084))

但是当我尝试使用 matplotlib 打开这个 o 时,我只得到了没有白色像素的黑色图像,因为矩阵中的值为 255,所以应该存在白色像素。

plt.imshow(o, cmap="gray", vmin=0, vmax=255)

我想使用列表中的数字将它们的值映射为图像中的位置,并将该位置的颜色更改为白色。

我在这里理解有关图像的一些基础知识可能是错误的,但我们将不胜感激这里的一些帮助

【问题讨论】:

标签: python numpy matplotlib computer-vision


【解决方案1】:

我认为这是屏幕分辨率问题。使用您的代码(略微简化)但降低分辨率显然有效:

import matplotlib.pyplot as plt
import numpy as np

L = [234, 78, 56, 98, 555, 876, 998]
n = np.zeros((32, 32), dtype="uint8")
n.ravel()[L] = 255

plt.figure(figsize=(2.5, 2.5))
plt.imshow(n, cmap="gray", vmin=0, vmax=255)

2048x2048 超过了我的屏幕分辨率,所以在这种情况下我什么都看不到:每个图像像素都小于屏幕像素。此外,所有的白点都位于第一行像素中,这会使其更难看到。

【讨论】:

    【解决方案2】:

    您的代码没有任何问题,但您的图像中的白点可能过于分散,无法在屏幕上看到它们。如果你想看到图像中的白点,你可以设置plt在显示之前设置一个大的分辨率,添加plt.figure(figsize=(M, M)),其中M是一个大整数,比如100。示例代码如下:

    N = 1000
    L = [8000, 8001, 8002, 8003, 9000, 9001, 9002, 9003, 10000, 10001, 10002, 10003, 11000, 11001, 11002, 11003]
    a = np.zeros((N,N), dtype=np.uint8)
    a.ravel()[L] = 255
    np.reshape(a, (N,N))
    plt.figure(figsize=(100, 100))
    _ = plt.imshow(a, cmap="gray", vmin=0, vmax=255)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多