繁体   English   中英

OpenCV RGB2HSV 颜色空间转换给出错误结果,颜色不相似

[英]OpenCV RGB2HSV color space convertion gives wrong results, colors aren't similar

为什么当我使用 OpenCV COLOR_RGB2HSV时颜色空间转换出错(图像不大致相似)并且在使用image.convert('HSV') 我做错了什么?

import cv2
from PIL import Image

image = Image.open('picture_1.jpg')

img1=cv2.imread('picture_1.jpg')
img2=cv2.cvtColor(img1,cv2.COLOR_BGR2RGB)
img3=cv2.cvtColor(img2,cv2.COLOR_RGB2HSV)
img4=cv2.cvtColor(img3,cv2.COLOR_HSV2RGB)

fig, ax = plt.subplots(2, 2, figsize=(16, 6), subplot_kw=dict(xticks=[], yticks=[]))
fig.subplots_adjust(wspace=0.05)
ax[0][0].imshow(img1)
ax[0][0].set_title('BGR', size=16)
ax[0][1].imshow(img2)
ax[0][1].set_title('RGB', size=16);
ax[1][0].imshow(img3)
ax[1][0].set_title('HSV', size=16);
ax[1][1].imshow(image.convert('HSV'))
ax[1][1].set_title('HSV', size=16);

我得到了这个结果:

在此处输入图片说明

OpenCV 假设图像在 imwrite 和 imshow 方法中都是 BGR 格式。 因此,它在保存或显示图像时将 HSV 矩阵作为 BGR 处理。 另一件事是在 OpenCV 文档中,他们说,“对于 HSV,色调范围为 [0,179],饱和度范围为 [0,255],值范围为 [0,255]。不同的软件使用不同的比例。因此,如果您将 OpenCV 值与它们进行比较,您需要标准化这些范围。” 你可以在这里找到

HSV 的缩放与您在OpenCV 中的预期不同。 当您的数据是np.uint8它只能在 0..255 范围内,因此色相值除以 2,而不是您预期的 0..360,它们的范围是 0..180。

顺便说一句,在您已经关于 PIL/Pillow 和 OpenCV 的问题中混合大量matplotlib会降低获得答案的可能性 - 最好保持简单。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM