ValueError:对象太深,无法在np.digitize函数中使用所需的数组

时间:2018-10-30 10:09:25

标签: python numpy

我正在尝试使用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))实际上是二维数组,是造成问题的原因。

1 个答案:

答案 0 :(得分:0)

鉴于您使用的是np.digitize,建议您检查numpy版本,如文档中关于输入值的说明:

  

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