为什么 OpenCV HSV 蓝色是绿色?
Why OpenCV HSV blue is green?
我正在尝试使用 OpenCV 将蓝色从 BGR 转换为 HSV。我的代码是:
blue = np.uint8([[[255,0,0 ]]])
hsv_blue = cv2.cvtColor(blue, cv2.COLOR_BGR2HSV)
lo_square = np.full((10, 10, 3), hsv_blue, dtype=np.uint8) / 255.0
plt.subplot(1, 1, 1)
plt.imshow(hsv_to_rgb(lo_square))
plt.show()
我得到的颜色是这样的:
为什么绿色值为1? opencv从哪里弄来的? (注意图形中可见转换后的颜色值,[0, 1, 0.824]
而hsv_blue
的值为array([[[120, 255, 255]]], dtype=uint8)
)
对于 dtype
uint8
,h
在使用 cv2.cvtColor(blue, cv2.COLOR_BGR2HSV)
时假定值介于 0 和 180 之间,因此您应该将其除以 180.
,而不是 255.
,即使 s 和 v 值在 0 .. 255 范围内。
这个有效:
import numpy as np
from matplotlib import pyplot as plt
from matplotlib.colors import hsv_to_rgb
from cv2 import cv2
blue = np.uint8([[[255, 0, 0]]])
hsv_blue = cv2.cvtColor(blue, cv2.COLOR_BGR2HSV)
lo_square = np.full((10, 10, 3), hsv_blue, dtype=np.uint8) / [180., 255., 255.]
plt.subplot(1, 1, 1)
plt.imshow(hsv_to_rgb(lo_square))
plt.show()
我正在尝试使用 OpenCV 将蓝色从 BGR 转换为 HSV。我的代码是:
blue = np.uint8([[[255,0,0 ]]])
hsv_blue = cv2.cvtColor(blue, cv2.COLOR_BGR2HSV)
lo_square = np.full((10, 10, 3), hsv_blue, dtype=np.uint8) / 255.0
plt.subplot(1, 1, 1)
plt.imshow(hsv_to_rgb(lo_square))
plt.show()
我得到的颜色是这样的:
为什么绿色值为1? opencv从哪里弄来的? (注意图形中可见转换后的颜色值,[0, 1, 0.824]
而hsv_blue
的值为array([[[120, 255, 255]]], dtype=uint8)
)
对于 dtype
uint8
,h
在使用 cv2.cvtColor(blue, cv2.COLOR_BGR2HSV)
时假定值介于 0 和 180 之间,因此您应该将其除以 180.
,而不是 255.
,即使 s 和 v 值在 0 .. 255 范围内。
这个有效:
import numpy as np
from matplotlib import pyplot as plt
from matplotlib.colors import hsv_to_rgb
from cv2 import cv2
blue = np.uint8([[[255, 0, 0]]])
hsv_blue = cv2.cvtColor(blue, cv2.COLOR_BGR2HSV)
lo_square = np.full((10, 10, 3), hsv_blue, dtype=np.uint8) / [180., 255., 255.]
plt.subplot(1, 1, 1)
plt.imshow(hsv_to_rgb(lo_square))
plt.show()