我正在编写一个将灰色图像转换为彩色图像的代码,但在此之前,代码会在给定代码行的帮助下将输入图像转换为不饱和图像:
def load_image(path):
img = imread(path)
# crop image from center
short_edge = min(img.shape[:2])
yy = int((img.shape[0] - short_edge) / 2)
xx = int((img.shape[1] - short_edge) / 2)
crop_img = img[yy : yy + short_edge, xx : xx + short_edge]
# resize to 224, 224
img = skimage.transform.resize(crop_img, (224, 224))
# desaturate image
return (img[:,:,0] + img[:,:,1] + img[:,:,2]) / 3.0
我在此特定行中收到错误,错误读为:
return (img[:,:,0] + img[:,:,1] + img[:,:,2]) / 3.0
IndexError: too many indices for array
请帮我解决我面临的问题。
答案 0 :(得分:0)
您的大多数代码都可以使用2D(灰度)或3D(RGB)数组。但是,最后一行明确要求使用3D数组。您可以添加一个条件来传递2D数组,因为代码只是将通道平均在一起:
if img.ndim < 3:
return img
# return average
或者,只要您意识到自己拥有2D阵列,就可以在函数开始时提出更多信息错误。做任何有意义的事情。
答案 1 :(得分:0)
这不是降低图像去饱和度的正确方法。请使用skimage.color.rgb2gray
,它可以应用于2D图像(已经去饱和),没有任何问题。
即,将最后一行更改为:
return color.rgb2gray(img)
并在脚本中添加from skimage import color
。