【发布时间】:2019-01-23 19:50:40
【问题描述】:
假设我在 python 中有一个 3d 数组,看起来像这样 [[[3, 4, 9], [5, 3, 1], [6, 4, 2]], [[2, 3, 6 ], [7, 9, 10], [5, 12, 4]], [[7, 5, 1], [3, 1, 2], [6, 5, 2]]]。我想提取每个条目的第一个元素并将它们全部放入一个像这样的一维数组 [3, 5, 6, 2, 7, 5, 7, 3, 6]。我正在使用一个 hsv 图像,其中每个像素都有一个 3 个元组,其中每个条目对应于色调、饱和度和值。我想只提取每个像素的色调值并将其放入一维数组中。这是我的代码的样子。
import numpy as np
import colorsys
from skimage import color
from skimage.color import rgb2hsv
img = cv2.imread("input.jpg", 1)
img_hsv = color.rgb2hsv(img)
b = []
for i in img_hsv:
b.append(i[0][0])
问题是我正在读取的图像是 640x480,而 b 的形状只有 640,这让我觉得我没有得到图像中的所有像素。所以我的两个问题是,我的 for 循环是否正确,我什至需要一个 for 循环来执行此操作,还是 python 有一个可以执行此操作的库?
【问题讨论】:
-
img_hsv[:, 0] 有什么问题?
-
这会产生预期的结果吗?我是 python 新手,所以我不知道这些东西是如何工作的。
-
假设 img_hsv 是一个二维数组,是的。这是正在发生的事情,通过调用 img_hsv[:, 0],您将切出第一列 ("0") 中的所有值 (":"),产生一个值为 [3, 2, 7] 的一维数组。或者,如果您调用 img_hsv[0, :] (即第一行中的所有值),您将得到一个值为 [3, 5, 6] 的一维数组。
-
img_hsv 是一种二维数组。基本上像 img_hsv[10][12] 这样的东西会产生一条像 [153, 25, 142] 这样的线,它代表色调、饱和度和值。我只想要每个像素的第一个值并放入一维数组中。
-
你确定数组是 2d 而不是 3d? img.shape 返回什么?