我想选择图像的某个部分(已经被纯色分割)并为其创建遮罩。
我在网上看到的示例来自: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上下边界的好方法?我尝试了多种组合,它们都导致黑色面罩。
我理解错了吗?请指教。非常感谢!