我正在尝试使用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))
实际上是二维数组,是造成问题的原因。
答案 0 :(得分:0)
鉴于您使用的是np.digitize,建议您检查numpy版本,如文档中关于输入值的说明:
要合并的输入数组。在NumPy 1.10.0之前,此数组必须为 一维,但现在可以具有任何形状。