使用 numpy 将 BGR 图像转换为灰度
Posted
技术标签:
【中文标题】使用 numpy 将 BGR 图像转换为灰度【英文标题】:Converting BGR image to grayscale using numpy 【发布时间】:2021-11-24 04:11:23 【问题描述】:我有一个小问题希望你们能帮助我。我知道要在不使用 numpy 的情况下将 RGB 图像转换为灰度,我们可以使用:
img = cv2.imread(input_file, cv2.IMREAD_COLOR)
r, g, b = img[:, :, 0], img[:, :, 1], img[:, :, 2]
img_gray = 0.2989 * r + 0.5870 * g + 0.1140 * b
现在我想通过 BGR 比例读取图像,然后将该 BGR 图像转换为灰度而不使用 cv2.COLOR_BGR2GRAY
,我该如何使用上面的类似代码来做到这一点?
【问题讨论】:
我不明白。你已经不用COLOR_BGR2RGB
了?
已编辑。为错误的输入道歉。
我还是不明白。你的代码也没有使用cv2.COLOR_BGR2GRAY
- 你已经实现了你的既定目标,确定吗?
我认为上面的代码是读取RGB图像并将其转换为灰度。实际上我想知道 BGR 到灰度的相同方式。
【参考方案1】:
OpenCV 将按照 BGR 顺序将文件读入内存,即使它在磁盘上是 RGB。这就是它的工作方式。因此,您需要将第二行更改为:
b, g, r = img[:, :, 0], img[:, :, 1], img[:, :, 2]
然后您的第三行将正常工作,尽管您可能希望使用以下方法制作无符号 8 位整数:
img_gray = (0.2989 * r + 0.5870 * g + 0.1140 * b).astype(np.uint8)
顺便说一句,您实际上可以像这样使用numpy
更快地做到这一点:
import numpy as np
grey = np.dot(img[...,::-1], [0.299, 0.587, 0.114]).astype(np.uint8)
【讨论】:
以上是关于使用 numpy 将 BGR 图像转换为灰度的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 matplotlib/numpy 将数组保存为灰度图像?
[opencv学习笔记] jiazhigang 30讲源码C++版本(含Makefile)