如何将此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/