Я пытаюсь выполнить квантование изображения с помощью функции 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 массивом, но он не сработал
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))
на самом деле является двумерным массивом, что вызвало проблему.