如何在Python中去饱和图像?

时间:2018-03-14 13:40:58

标签: python python-3.x image scikit-image

我正在编写一个将灰色图像转换为彩色图像的代码,但在此之前,代码会在给定代码行的帮助下将输入图像转换为不饱和图像:

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

请帮我解决我面临的问题。

2 个答案:

答案 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