【发布时间】:2019-06-01 14:43:12
【问题描述】:
观察下图:
观察以下 Python 代码:
import cv2
img = cv2.imread("rainbow.png", cv2.IMREAD_COLOR)
img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # convert it to hsv
img = cv2.cvtColor(img, cv2.COLOR_HSV2BGR) # convert back to BGR
cv2.imwrite("out.png", img)
这是输出图像:
如果您看不到它,则此处的图像明显失去了视觉保真度。为了比较起见,这里是输出图像旁边的原始图像,在黄色附近放大:
这里发生了什么?有什么方法可以防止出现这些块状伪影吗?我需要转换为 HSL 颜色空间来旋转色调,但如果我要得到这些类型的伪像,我就不能这样做。
请注意,当我不进行两次转换时,输出图像没有伪影;转换本身确实是原因。
【问题讨论】:
-
可能是 8 位图像?色调从 360 度映射到 180 度以保持在 255 以下 - 无符号 8 位数字的限制。所以有一个 2 度的色调粒度。
-
@MarkSetchell,你是对的,它是一个 8 位图像。那么我该怎么做才能避免这种情况呢?
-
我不在电脑前测试,但我会尝试使用
float而不是 8 位。
标签: python image opencv colors cv2