使用 numpy 将 BGR 图像转换为灰度图像

Converting BGR image to grayscale using numpy

有个小问题希望大家帮帮我。我知道要在不使用 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 比例读取图像,然后不使用 cv2.COLOR_BGR2GRAY 将该 BGR 图像转换为灰度图像,我该如何使用上面的类似代码来实现?

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)