【发布时间】:2019-04-03 08:27:12
【问题描述】:
我正在尝试使用 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
编辑:我也尝试过使用一维数组进行装箱,但效果不佳
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)) 实际上是一个二维数组,这是导致问题的原因。
【问题讨论】:
-
调试提示:如果一个函数莫名其妙地产生错误,请检查传递给函数的所有参数是否正确。在这种情况下,请仔细查看
bins参数。digitize的文档字符串说bins必须是一维且单调的。是吗?例如,检查bins.shape。