如何正确选择HSV范围以创建图像蒙版?

时间:2019-01-30 08:54:22

标签: python opencv image-processing

我想选择图像的某个部分(已经被纯色分割)并为其创建遮罩。

我在网上看到的示例来自:https://realpython.com/python-opencv-color-spaces/,其中:

import matplotlib.pyplot as plt
import cv2

nemo = cv2.imread('nemo.png')
nemo = cv2.cvtColor(nemo, cv2.COLOR_BGR2RGB)
hsv_nemo = cv2.cvtColor(nemo, cv2.COLOR_RGB2HSV)

light_orange = (1, 190, 200)
dark_orange = (18, 255, 255)

mask = cv2.inRange(hsv_nemo, light_orange, dark_orange)
result = cv2.bitwise_and(nemo, nemo, mask=mask)

plt.subplot(1, 3, 1)
plt.axis('off')
plt.title('hsv')
plt.imshow(hsv_nemo)
plt.subplot(1, 3, 2)
plt.axis('off')
plt.title('mask')
plt.imshow(mask, cmap="gray")
plt.subplot(1, 3, 3)
plt.axis('off')
plt.title('orange mask') 
plt.imshow(result)
plt.show()

结果是:Result

虽然我理解了示例,但是当我用已经按颜色(例如:Sample Picture)分割的示例图片进行尝试时,我的遮罩始终是黑色的,并且在识别正确的范围时遇到了问题。

例如,我只想掩盖图片的粉红色部分。我确定粉红色的RGB值为:(192,128,128)。通过以下代码将其转换为HSV,得出的HSV值为:[0,85,192]

color = np.uint8([[[192,128,128]]])
hsv = cv2.cvtColor(color,cv2.COLOR_RGB2HSV)
print(hsv)

有了该HSV值,什么是确定cv2.inRange上下边界的好方法?我尝试了多种组合,它们都导致黑色面罩。

我理解错了吗?请指教。非常感谢!

0 个答案:

没有答案