使用Python将RGB图像转换为灰度图像

3

我正在尝试使用Python中的skimage将RGB图像转换为灰度图像。这是我的操作:

for im_path in glob.glob(os.path.join(pos_raw, "*")):
    im = imread(im_path)
    im = color.rgb2gray(im)
    image_name = os.path.split(im_path)[1].split(".")[0] + ".pgm"
    image_path = os.path.join(pos_img_path, image_name)
    imwrite(image_path, im)

针对一堆图像文件的问题。 我的输入图片看起来是这样的:

Color image

输出图片看起来是这样的:

Black image

期望的输出是这样的:

Gray image

这里可能出了什么问题?

你尝试将其分解成更小的部分了吗?例如,您知道图像是否被正确读取和保存了吗?您转换为灰度的代码看起来很好,我会检查文件读写部分。(实际上我不熟悉scikit-image,只是提供一般性建议) - Luke Taylor
请务必将您的解决方案发布为答案,并接受它以供他人参考。很高兴能帮助到您。 - Luke Taylor
1
你上面的代码对我来说运行良好,输出了图像的灰度版本。然而,我需要使用imsave而不是imwrite - mfitzp
1
@mfitzp,太好了,显然imsave会自动拉伸对比度。不过我收到了以下警告:UserWarning:在从float64转换为uint8时可能会出现精度损失。虽然我认为这对我来说没问题 :) - Ranveer
为什么你不使用imread_collection()函数? - Darleison Rodrigues
1个回答

6

已经搞定了,问题出在对比度上。

我打印出这张图片后发现它的值都接近于0。我在循环中引入了一个小线段,将对比度从0到255进行了拉伸,这样就成功解决了问题。

im = rescale_intensity(im, out_range=(0, 255))

其中rescale_intensity是从skimage.exposure中导入的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接