我试图使用matplotlib
读取RGB图像并将其转换为灰度。
在matlab中,我使用这个:
img = rgb2gray(imread('image.png'));
在matplotlib tutorial中,它们不覆盖它。他们只是在图像中读到
import matplotlib.image as mpimg
img = mpimg.imread('image.png')
然后他们对数组进行切片,但这与根据我的理解将RGB转换为灰度不同。
lum_img = img[:,:,0]
我发现很难相信numpy或matplotlib没有一个内置函数来从rgb转换为gray。这不是图像处理中常见的操作吗?
我编写了一个非常简单的函数,它可以在5分钟内处理使用imread
导入的图像。它的效率非常低,但这就是为什么我希望内置一个专业的实现。
塞巴斯蒂安改进了我的功能,但我还是希望能找到内置的。
matlab(NTSC/PAL)实现:
import numpy as np
def rgb2gray(rgb):
r, g, b = rgb[:,:,0], rgb[:,:,1], rgb[:,:,2]
gray = 0.2989 * r + 0.5870 * g + 0.1140 * b
return gray
用Pillow怎么样:
使用matplotlib和the formula
你可以:
在Ubuntu 16.04lts(xeone52670ssd)上用Python 3.5运行1000个RGBA PNG图像(224x 256像素),测试了三种建议的方法的速度。
平均运行时间
pil :
1.037秒scipy:
1.040秒sk :
2.120秒PIL和SciPy给出了相同的
numpy
数组(范围从0到255)。skipage给出从0到1的数组。此外,颜色的转换略有不同,请参见CUB-200 dataset.中的示例SkImage:
PIL :
SciPy :
Original:
Diff :
代码
性能
您还可以使用scikit-image,它提供了一些函数来转换
ndarray
中的图像,例如rgb2gray
。注意事项:此转换中使用的重量针对当代CRT荧光粉进行校准:Y=0.2125 R+0.7154 G+0.0721 B
或者,可以通过以下方式读取灰度图像:
相关问题 更多 >
编程相关推荐