首页 > 解决方案 > 我正在尝试将 RGB 转换为 Lab,然后将 a 和 b 通道归零以获得灰度图像,但我得到的图像带有红橙色

问题描述

我的代码:

imgrey = np.asarray(ibuffer).copy()
grey = cv2.cvtColor(imgrey, cv2.COLOR_BGR2Lab)
grey[:,:,1] = 0
grey[:,:,2] = 0
grey = cv2.cvtColor(grey,cv2.COLOR_LAB2BGR)
photo = Image.fromarray(grey)
photo = resize(photo)
photo = ImageTk.PhotoImage(photo)
canvas.photo = photo
canvas.create_image(0,0,anchor="nw",image = photo)

我想使用它的 Lab 值来操作我的图像,但是当操作的 Lab 值转换回 RGB 时,这样做会产生不正确的输出。

原图

输出图片

标签: pythonopencvimage-processingpython-imaging-library

解决方案


如果你只想要一个灰度图像 OpenCV 有 cvtColor(img, cv2.COLOR_BGR2GRAY) 这将返回一个单通道灰度图像。您也可以只使用 LAB 图像中的 L 通道,它看起来像灰度图像(但我认为它不完全相同)。

修改实验室图像的“a”和“b”通道可能有点不直观,因为每个通道都使用“正”和“负”值控制不同的颜色饱和度。这是一个从 128 开始向两个方向移动的滑动刻度。这就是为什么将它们设置为零不是灰色的,它实际上是一个方向的完全饱和。我怀疑如果你将它们都设置为 128 你会得到你想要的。


推荐阅读