我已经生成了一张RGB和HSV格式的散点图,并使用
为了获得精确的RGB和HSV值,我使用paint.net的取色器获取RGB值,然后使用RGB to HSV转换器获取HSV值。 像素颜色和散点图是通过以下方式生成的:
我需要从我的图片中提取黄色。如上所述,我正在使用paint.net颜色选择器获取浅黄和深黄的RGB值。然后使用转换器获取
但是生成的结果是一张黑色的图像,但是如果我直接使用浅黄色和深黄色的RGB值,并使用RGB图像而不是HSV转换后的图像,则分割可以正常工作。
inRange()
函数从图中选取一个颜色进行阈值处理。为了获得精确的RGB和HSV值,我使用paint.net的取色器获取RGB值,然后使用RGB to HSV转换器获取HSV值。 像素颜色和散点图是通过以下方式生成的:
img = cv2.imread('C:\\b_.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
pixel_colors = img.reshape((np.shape(img)[0]*np.shape(img)[1], 3))
norm = colors.Normalize(vmin=-1., vmax=1.)
norm.autoscale(pixel_colors)
pixel_colors = norm(pixel_colors).tolist()
h, s, v = cv2.split(img_hsv)
fig = plt.figure()
axis = fig.add_subplot(1, 1, 1, projection="3d")
axis.scatter(h.flatten(), s.flatten(), v.flatten(), facecolors=pixel_colors, marker=".")
axis.set_xlabel("Hue")
axis.set_ylabel("Saturation")
axis.set_zlabel("Value")
plt.show()
我需要从我的图片中提取黄色。如上所述,我正在使用paint.net颜色选择器获取浅黄和深黄的RGB值。然后使用转换器获取
inRange()
函数的HSV值。light_yellow = (60, 89, 97) # HSV VALUES
dark_yellow = (61, 36.6, 43.9)
mask = cv2.inRange(img_hsv, light_yellow, dark_yellow)
result = cv2.bitwise_and(img, img, mask=mask)
但是生成的结果是一张黑色的图像,但是如果我直接使用浅黄色和深黄色的RGB值,并使用RGB图像而不是HSV转换后的图像,则分割可以正常工作。
light_yellow = (249, 249, 125) # RGB VALUES
dark_yellow = (111, 112, 71)
mask = cv2.inRange(img, light_yellow, dark_yellow)
result = cv2.bitwise_and(img, img, mask=mask)
尽管上述是RGB分割,但我觉得在HSV方面可能会有所改进。为什么我的HSV范围没有输出?