如何在Python中将RGB图像转换为灰度图像?

2023-11-25

我正在尝试使用matplotlib读取 RGB 图像并将其转换为灰度图像。

在 matlab 中我使用这个:

img = rgb2gray(imread('image.png'));

In the matplotlib 教程他们不涵盖它。他们只是在图像中阅读

import matplotlib.image as mpimg
img = mpimg.imread('image.png')

然后他们对数组进行切片,但这与我理解的将 RGB 转换为灰度不同。

lum_img = img[:,:,0]

我很难相信 numpy 或 matplotlib 没有内置函数来从 RGB 转换为灰色。这不是图像处理中常见的操作吗?

我编写了一个非常简单的函数,可以处理使用导入的图像imread5分钟后。它的效率非常低,但这就是为什么我希望有一个专业的内置实现。

Sebastian 改进了我的功能,但我仍然希望找到内置的功能。

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:

from PIL import Image
img = Image.open('image.png').convert('L')
img.save('greyscale.png')

如果输入图像中存在 alpha(透明度)通道并且应保留,请使用模式LA:

img = Image.open('image.png').convert('LA')

使用 matplotlib 和公式

Y' = 0.2989 R + 0.5870 G + 0.1140 B 

你可以这样做:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as mpimg

def rgb2gray(rgb):
    return np.dot(rgb[...,:3], [0.2989, 0.5870, 0.1140])

img = mpimg.imread('image.png')     
gray = rgb2gray(img)    
plt.imshow(gray, cmap=plt.get_cmap('gray'), vmin=0, vmax=1)
plt.show()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Python中将RGB图像转换为灰度图像? 的相关文章

随机推荐

  • 更改为 Android SDK 26 后工具栏中的图标被压扁

    将我的应用程序从编译 定位 SDK v25 更改为 SDK v26 后 我的应用程序工具栏中的所有菜单图标现在都被压扁 压扁 拉伸 这是相关的布局代码
  • Postgres 会将 WHERE 子句下推到带有窗口函数(聚合)的 VIEW 中吗?

    的文档Pg的窗口函数说 窗口函数考虑的行是查询的 FROM 子句生成的 虚拟表 的行 并通过其 WHERE GROUP BY 和 HAVING 子句 如果有 进行过滤 例如 由于不满足 WHERE 条件而被删除的行不会被任何窗口函数看到 查
  • 如何在 Swift 中使用 MarqueeLabel?

    我想知道是否有一种方法可以启用文本的水平滚动 即选取框类型的文本 我用过这个库 https github com cbpowell MarqueeLabel并将 MarqueeLabel Swift 文件添加到我的应用程序中 但到目前为止
  • 无法在 Visual Studio 项目属性中选择 .NET Framework 4.6.1

    我使用以下网址安装了 NET Framework 4 6 1 http www microsoft com en us download details aspx id 49981 但是当我打开 Visual Studio 2015 项目时
  • 如何更改 MonthCalendar 控件中某些日期的颜色?

    如何更改 VB NET 中 MonthCalendar 控件中某些日期的颜色 例如 我需要将 1 月 21 日的颜色更改为红色 星期日更改为橙色等等 这不可能 没有内置的方法可以自定义各个日期或日期在屏幕上的显示方式MonthCalenda
  • 对于高度优化的矩阵乘法代码,MSVC 和 GCC 之间的性能差异

    我发现 Ivy Bridge 系统的 MSVC 在 Windows 上 和 GCC 在 Linux 上 编译的代码在性能上存在很大差异 该代码执行密集矩阵乘法 我在 GCC 中得到了 70 的峰值失败率 而在 MSVC 中只有 50 我想我
  • iOS Safari/Chrome 中的 Cookie 持久性

    当我关闭并重新打开 iOS Safari 和 Chrome 上的浏览器时 我的持久 cookie 将被删除 我使用的是 iOS 11 但也在 iOS10 9 上进行了测试 Cookie 在 Android 和桌面上正确保留 奇怪的是 它在
  • 使用 C# 的媒体基础

    媒体基金会是微软推荐的技术 它确实通过大量示例和解释来支持它 但全部都是本机代码 我发现了一个包装纸来源锻造让我能够将 Media Foundation 与 C 一起使用 但当我阅读人们谈论的内容时 并非所有事情都可以通过托管代码完成 我有
  • 网络参考和服务参考之间的区别?

    WCF 中的 Web 引用和服务引用有什么区别 WCF 中哪一个更可取 这里的低级答案是 Web 引用将创建一个客户端代理类 该类允许您的代码与通过 WSDL 描述的 Web 服务对话 并通过 SOAP 或 HTTP GET 进行通信 其他
  • Docker 更改活动容器上的已发布端口

    例如 我想更改活动容器上已发布的端口 docker run p 80 80 name nginx live nginx 然后稍后将其更改为另一个端口 例如 p 8080 80 Docker 没有一种机制可以在容器启动后更改其已发布的端口 当
  • 如何在 Objective-C 中将字符串中的英文数字转换为波斯语/阿拉伯语数字?

    我有一个英文字符串 可能有数字 也可能没有数字 但我希望这些数字作为波斯数字打印在屏幕上 例如如果NSString foo a string with numbers 1 2 3 那么输出应该是a string with numbers 我
  • 在加载数据之前显示 Ajax 加载器

    你好 朋友们 我想在数据加载之前显示 Ajax 加载器 特别是 div 但问题是数据是动态地出现在同一页面上 但我的脚本从另一个文件调用数据Script php请看下面我的代码 Script
  • GitHub for Mac 同步删除了我未提交的更改

    我在 Mac OS X 10 10 上使用 GitHub for Mac 版本 210 点击 同步 按钮删除了我未提交的更改 这种事应该时常发生吗 直到那时我才遇到过这个问题 尽管我主要使用 Windows 版的 Github 我认为如果我
  • PHP:Laravel 如何急切加载 find 方法

    我有一个模型Users其中有很多Pages 我想急切加载下面的方法 以便它只返回一个用户并立即加载所有页面 我该怎么做 user User find 1 pages user gt pages foreach pages as page v
  • “无法确定要运行哪个“make”命令。检查构建配置中的“make”步骤。” Qt创建者

    我安装了好几次 qt Creator 但它的花费从来没有像我现在的电脑那么高 首先 我使用了 Pendrive 上一直有的安装程序 Qt 5 8 的安装程序 告诉我无法下载某些存储库 我下载了同一安装程序的 5 9 版本 结果相同 在尝试安
  • 未找到 OpenCV 非托管 DLL asp.net

    我们正在构建一个 Web 应用程序 C NET 它使用 Emgu opencv 包装器形式的非托管库 我们强制构建为 32 位 x86 并且我们使用 Emgu 的 32 位版本 所有这些在本地构建上都运行良好 但是当发布到我们的网络服务器时
  • 使用 C++ 和 Windows API 以编程方式更改壁纸

    我一直在尝试使用 Qt 和 mingw32 编写一个应用程序来下载图像并将其设置为背景壁纸 我在网上阅读了几篇关于如何在 VB 和 C 中执行此操作的文章 以及在某种程度上如何在 C 中执行此操作 我目前正在致电SystemParamete
  • 错误:无效的“asm”:在 GCC 中使用内联汇编时,% 字母后缺少操作数编号

    我正在尝试将 MS 的简单汇编代码转换为与 gcc 一起使用 我尝试转换的 MS 汇编代码就在下面 我有两个int变量 number and return mov eax number neg eax return eax 而且 我已经尝试
  • std::regex 线程安全吗?

    相关静态 boost wregex 实例是线程安全的吗 但对于标准化版本 我可以从具有相同正则表达式对象的多个线程调用 regex search 吗 声称std regex在各个方面都是线程安全的 这是一个相当大胆的声明 C 11 标准没有
  • 如何在Python中将RGB图像转换为灰度图像?

    我正在尝试使用matplotlib读取 RGB 图像并将其转换为灰度图像 在 matlab 中我使用这个 img rgb2gray imread image png In the matplotlib 教程他们不涵盖它 他们只是在图像中阅读