将二维numpy数组转换为表示灰度图像的三维numpy数组

3 投票
1 回答
6250 浏览
提问于 2025-04-18 03:11

我正在使用OpenCV、numpy和Python。我有一个二维的 uint8 numpy数组。这个数组里的值表示从经过阈值处理的图像中,超过阈值的像素的局部密度。我想把这个数组转换成一个三维的RGB图像,所有的RGB值都设置成一样的,也就是说,基本上是一个灰度图像,其中最大值对应 (255,255,255),其他的值则按比例缩放。(我需要RGB格式,因为这似乎是我用OpenCV写入视频的唯一图像类型)。那么,有什么高效的方法可以做到这一点呢?

1 个回答

4

我假设你有一张二维的灰度图像,像这样:

>>> import cv2
>>> img_gray = cv2.imread('./440px-Lenna.png', cv2.CV_LOAD_IMAGE_GRAYSCALE) # image take from http://en.wikipedia.org/wiki/Lenna

现在,img_gray 里存的是一张灰度图像:

>>> print(img_gray.shape)
 (440, 440)

你可以通过 cv2.cvtColor 这个方法高效地把这张图像转换成BGR格式:

>>> img_bgr = cv2.cvtColor(img_gray, cv2.COLOR_GRAY2BGR)
>>> print(img_bgr.shape)
 (440, 440, 3)

撰写回答