如何将此 HSV 转换为 RGB 我希望使用 cv2.color cv2.COLOR_BGR2RGB 但其结果不同。
这是我用过的图片 enter image description here
这是我想要的结果,但使用cv2.COLOR_BGR2RGB,但下面的代码使用cv2.COLOR_BGR2HSV enter image description here
import cv2
import numpy as np
## Read
img = cv2.imread("ni.jpg")
## convert to hsv
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
## mask of green (36,25,25) ~ (86, 255,255)
# mask = cv2.inRange(hsv, (36, 25, 25), (86, 255,255))
mask = cv2.inRange(hsv, (7, 25, 25), (70, 255,255))
## slice the green
imask = mask>0
green = np.zeros_like(img, np.uint8)
green[imask] = img[imask]
## save
cv2.imwrite("green.png", green)
最佳答案
要将图像从 HSV 转换为 RGB,您可以执行以下操作:
rgb = cv2.cvtColor(hsv, cv2.COLOR_HSV2RGB)
将 HSV 转换为 BGR
bgr = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)
你必须知道OpenCV在读取/保存图像时使用BGR。 您可以使用 cvtColor 和 cv2.COLOR_RGB2BGR 或 cv2.COLOR_BGR2RGB 在 RGB 和 BGR 之间进行转换。
编辑:
但是,如果您想要的是绿色香蕉(或黄色香蕉)的面具,问题是您定义绿色的方式:它现在包含许多其他颜色,包括黄色。
您可以使用 HSV 做的就是仅查看第一个 channel ,即色调:
在这里您可以看到绿色和黄色是可以区分的:绿色香蕉的像素值大致在 30 到 50 之间,黄色香蕉的像素值在 20 到 30 之间。
你可以用它做一个面具。我使用另一个库来清理我们不需要的像素。这是 Scikit 图像。这也可以在 OpenCV 中完成,但需要更多时间......
这是我的代码:
import cv2
import numpy as np
import matplotlib.pyplot as plt
from skimage.morphology import remove_small_objects, remove_small_holes
## Read
img = cv2.imread("ni.jpg")
## convert to hsv
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
hue = hsv[:,:,0]
# plt.imshow(hue) # this show the figure in my post
# plt.show()
# mask = np.bitwise_and(hue > 20, hue < 35) # for yellow
mask = np.bitwise_and(hue > 30, hue < 50) # for green
mask = remove_small_objects(mask, 1000)
mask = remove_small_holes(mask, 1000)
green = np.zeros_like(img, np.uint8)
green[mask] = img[mask]
## save
cv2.imwrite("green.png", green)
关于python - 如何将此 HSV 转换为 RGB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60295773/