ValueError:对于np.digitize函数中所需的数组,对象太深



我正在尝试使用np.digitize函数进行图像量化,但一直得到"太深"的错误
根据文档,2d和1d阵列都支持,但对我来说都不起作用。将numpy导入为np将matplotlib.pyplot导入为plt将matplotlib.image导入为mpimg

def rgb2gray(rgb):
return np.dot(rgb[...,:3], [0.299, 0.587, 0.114])
def quant_img(img, N):
bins = np.array([range(0,N)])
inds = np.digitize(img, bins)
return inds
img = mpimg.imread("img.jpg")     
gray = rgb2gray(img)
gray_qaunt = quant_img(gray,10)

错误为

ValueError                                Traceback (most recent call last)
<ipython-input-30-f751f38c519e> in <module>()
17 gray = rgb2gray(img)
---> 18 gray_qaunt = quant_img(gray,10)

<ipython-input-30-f751f38c519e> in quant_img(img, N)
---> 13     inds = np.digitize(img, bins)
14     return inds

ValueError: object too deep for desired array

编辑:我也尝试过用1d数组进行bin,但它没有像那样工作

def quant_img(img, N):
bins = np.array([range(0,N)])
img = np.array(img.flatten())
inds = np.digitize(img, bins)
return inds

编辑:感谢@Warren Weckesser,我注意到np.array(range(0,X))实际上是一个2d数组,这就是问题的原因。

鉴于您使用的是np.digitize,我建议您检查numpy版本,因为文档中对输入值有这样的说明:

要装箱的输入数组。在NumPy 1.10.0之前,此数组必须一维,但现在可以有任何形状。

最新更新