在使用 opencv 时,为什么我的一个通道值变为零?
While using opencv why one of my channel values became zero?
我在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, 0, 252],
[ 52, 0, 252],
[ 52, 0, 252],
...,
[ 59, 0, 186],
[ 59, 0, 186],
[ 59, 0, 186]],
[[ 52, 0, 252],
[ 52, 0, 252],
[ 52, 0, 252],
...,
[ 59, 0, 186],
[ 59, 0, 186],
[ 59, 0, 186]],
[[ 52, 0, 252],
[ 52, 0, 252],
[ 52, 0, 252],
...,
[ 59, 0, 187],
[ 59, 0, 187],
[ 59, 0, 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, 252],
[ 26, 54, 252],
[ 26, 54, 252],
...,
[ 30, 151, 186],
[ 30, 151, 186],
[ 30, 151, 186]],
[[ 26, 54, 252],
[ 26, 54, 252],
[ 26, 54, 252],
...,
- 为什么 float32 在我的频道之一上制作为零。哪一个是正确的转换方法?
测试图片:
对于 float32 格式,还有其他值范围。
对于 RGB 图像,它的范围是 [0.0,1.0]。
对于单纯疱疹病毒:
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))
我在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, 0, 252],
[ 52, 0, 252],
[ 52, 0, 252],
...,
[ 59, 0, 186],
[ 59, 0, 186],
[ 59, 0, 186]],
[[ 52, 0, 252],
[ 52, 0, 252],
[ 52, 0, 252],
...,
[ 59, 0, 186],
[ 59, 0, 186],
[ 59, 0, 186]],
[[ 52, 0, 252],
[ 52, 0, 252],
[ 52, 0, 252],
...,
[ 59, 0, 187],
[ 59, 0, 187],
[ 59, 0, 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, 252],
[ 26, 54, 252],
[ 26, 54, 252],
...,
[ 30, 151, 186],
[ 30, 151, 186],
[ 30, 151, 186]],
[[ 26, 54, 252],
[ 26, 54, 252],
[ 26, 54, 252],
...,
- 为什么 float32 在我的频道之一上制作为零。哪一个是正确的转换方法?
测试图片:
对于 float32 格式,还有其他值范围。
对于 RGB 图像,它的范围是 [0.0,1.0]。
对于单纯疱疹病毒:
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))