Python3 将数组从 (x,y,3) 减少到 (x,y,1) (RGB 到灰度)

标签 python arrays numpy

我对 python 很陌生,因此我可能会冒重复的风险(但我还不知道如何向网络询问)。

我编写了以下方法。它将数组(ROWS,COLS,3) 转换为数组(ROWS,COLS,1)

def convert_greyscale( rgb ):
    rgb_greyscale = np.zeros( (rgb.shape[0],rgb.shape[1]), dtype=np.uint8)
    for row in range(0, rgb.shape[0]:
        for col in range(0, rgb.shape[1]):
            rgb_greyscale[row][col] = int(0.2126 * rgb[row][col][0] + 0.7152 * rgb[row][col][1] + 0.0722 * rgb[row][col][2])
    return rgb_greyscale

遗憾的是我无法更短地重现它。已经有一篇文章有​​人提到了 np.dot 的解决方案,但是它与我的小函数的结果不同。

如何使用更高效(lambda)或至少更优雅的表达式重写此代码?

这个方法有效吗?

最佳答案

您可以简单地使用:

return (0.2126*rgb[:,:,0]+0.7152*rgb[:,:,1]+0.0722*rgb[:,:,2])\
           .astype(np.uint8)

这里不需要循环,让 numpy 进行迭代。

关于Python3 将数组从 (x,y,3) 减少到 (x,y,1) (RGB 到灰度),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45280686/

相关文章:

python - 如何将字符串拆分为单词列表?

arrays - 使用 6 种面额找零的快速算法 : Interview Practice

python - 如何识别 numpy 数组中的最小值,不包括对角线零?

python - 在 Python 中使用 BeautifulSoup 解析 <TR> </TR> 标签并打印元素

python - 替换字符串中的货币值时,Python 中的 re.sub() 并不总是有效

python - 如何在python中实现线程socket.recv()?

c# - 创建一个普通数组,其中一个位置可以保存多个值

c# - 索引超出数组错误的范围 (C#)

python - Pandas :如何有条件地分配多列?

python - 如何将彩色像素更改为白色像素