微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在使用 opencv 时,为什么我的通道值之一变为零?

如何解决在使用 opencv 时,为什么我的通道值之一变为零?

我在 hsv 转换过程中哪里出错了?为什么我会丢失数组中的数据,这是转换为 hsv 图像的正确方法

*注意:在我的要求中,我需要将 PIL 图像提供给 cvt.Color(),但是我在此过程中丢失了数据?有什么方法可以在 OpenCV 中使用 PIL 图像执行此操作吗?

image = PIL.Image.open("112.jpg")
data = np.asarray(image)                      #Feeding the same  RGB array
y1=cv2.cvtColor(np.float32(data),cv2.COLOR_RGB2HSV)
y1 = y1.astype(np.uint8)

>>  y1
>>> array([[[ 52,252],[ 52,...,[ 59,186],186]],[[ 52,187],187]],

同样,

image = PIL.Image.open("112.jpg")
data = np.asarray(image)                      #Feeding the same  RGB array
y1=cv2.cvtColor(data,cv2.COLOR_RGB2HSV)
y1 = y1.astype(np.uint8)

>>> array([[[ 26,54,[ 26,[ 30,151,[[ 26,
  1. 为什么我的频道之一是 float32 零。哪一种是正确的转换方法

测试图片

enter image description here

解决方法

对于 float32 格式,还有其他范围的值。

对于 RGB 图像,范围为 [0.0,1.0]。

对于 HSV:

uint8 - H[0,180]、S[0,255]、V[0,255]

float32 - H[0.0,360.0],S[0.0,1.0],V[0.0,1.0]

这是将 HSV float32 转换为 uint8 的正确方法:

img1=cv2.cvtColor(img,cv2.COLOR_RGB2HSV)
print(img1[0,0])

img = img.astype(np.float32)/255
img2=cv2.cvtColor(img,cv2.COLOR_RGB2HSV)
print((img2[0,0]*np.array([0.5,255,255],np.float32)).astype(np.uint8))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。