python - 我正在尝试将 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 时,这样做会产生不正确的输出。
解决方案
如果你只想要一个灰度图像 OpenCV 有 cvtColor(img, cv2.COLOR_BGR2GRAY) 这将返回一个单通道灰度图像。您也可以只使用 LAB 图像中的 L 通道,它看起来像灰度图像(但我认为它不完全相同)。
修改实验室图像的“a”和“b”通道可能有点不直观,因为每个通道都使用“正”和“负”值控制不同的颜色饱和度。这是一个从 128 开始向两个方向移动的滑动刻度。这就是为什么将它们设置为零不是灰色的,它实际上是一个方向的完全饱和。我怀疑如果你将它们都设置为 128 你会得到你想要的。
推荐阅读
- javascript - 使用 Firestore 分页 - 不断带回相同的最后十个文档
- python - Numpy:1:many 操作上下文中的向量化
- php - API 平台 - 无需操作的资源
- sharepoint - 在 InfoPath 表单中禁用规则
- php - explode() 给了我我没想到的空白值
- xml - Groovy 的 XmlParser 丢失 CDATA 指示符
- excel - 宏 Essbase 检索
- python - 基于来自另一个字典的整数值从字典列表值中随机抽样,具有匹配的键
- python - 有没有办法从不同长度的熊猫数据框中移动多行?
- xcode - .h 和 .m 类查看的 Xcode 11 问题