【问题标题】:How to cv2.imshow images stored in Numpy array?如何 cv2.imshow 存储在 Numpy 数组中的图像?
【发布时间】:2019-07-17 13:19:23
【问题描述】:

我有 2 个文件夹,每个文件夹包含 10 张图像,我已将它们加载到 Numpy 数组中并将它们连接起来(原始的单个 np 数组形状:10 128 128 3,连接的 np 数组形状:20 128 128 3)。现在我想循环 20 次并 cv2.imshow 每个图像,例如,第一个 '1 128 128 3',然后是 '2 128 128 3' 等等。但是如何将这样的形状输入 cv2.imshow?

我的代码:

import numpy as np
import cv2
import glob

first_images = np.array([cv2.imread(file) for file in glob.glob("/filepath/*.png")])
second_images = np.array([cv2.imread(file) for file in glob.glob("/filepath/*.png")])


num_of_first =first_images.shape[0]
num_of_second = second_images.shape[0]

image_array = np.concatenate((first_images,second_images),axis=0)

for image in range(image_array.shape[0]):

也许我可以做类似的事情 single_image = image_array(图像,,,) 然后将其重塑为 128x128x3?但我不知道该怎么做。

编辑:

尝试cv2.imshow(image_array[image, :,:,:])获取

TypeError:找不到所需的参数“mat”(位置 2)

我改用 cv2.imwrite 并且能够得到我想要的。问题仍然是如何让 cv2.imshow 工作。

【问题讨论】:

  • 您的错误是 image_arraynumpy.ndarray- 您应该使用方括号对其进行索引。不确定这是否能解决您的问题。
  • @FChm 在这种情况下我得到错误IndexError: index 128 is out of bounds for axis 1 with size 128
  • 这是因为该轴的索引从 0 到 127。我想使用cv2.imshow(image_array[image, :, :, :]) 会起作用。
  • 哈哈..看起来很 matlab-y。所以它给出了错误TypeError: Required argument 'mat' (pos 2) not found。也试过 image_array[image, , , ] 不行。
  • 如果image_array是4d,image_array[0]是3d,它的len的2维大小为image_array,128,不是图片的数量。如果不是因为 128 太大,image_array[image,128,128,3] 将返回一个点。 image_array[i, :,:,:] 返回单个 3d 数组。

标签: python arrays image numpy opencv


【解决方案1】:

我认为您需要在 numpy 中使用“shape”而不是“len”来获取数组大小。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-09
    • 2021-03-24
    • 2021-05-29
    • 1970-01-01
    • 2013-01-21
    • 1970-01-01
    • 2021-11-07
    • 2012-04-12
    相关资源
    最近更新 更多