cv2.inRange 的 lower/upper 个参数是什么颜色 space?
What color space are the lower/upper arguments for cv2.inRange?
我正在尝试为颜色范围创建遮罩。我知道我需要先将图像转换为 HSV,然后再将其传递到 inRange。 inRange 的下两个参数是我们为其创建遮罩的颜色的下限值和上限值。
下部和上部是什么颜色space?
我已经根据此处的答案看到了 HSV 和 BGR。该文档没有调出要使用的特定颜色 space。例如,这个答案 (How to define a threshold value to detect only green colour objects in an image :Opencv) 表示值应该在 HSV 中,但传递的值看起来像 BGR(例如 255)。
PS - 关于 tools/tricks 选择特定范围的任何提示?我一直在使用 Google 的颜色选择器
使用以下代码查找特定对象的 HSV 颜色值。并将此 HSV 值设置为 cv2.inRange 下限值和上限值。这是一个 opencv 程序,使用您的设备摄像头和轨迹栏,您可以找到 HSV 上限和下限值:
import cv2
import numpy as np
def nothing(x):
pass
cap = cv2.VideoCapture(0)
cv2.namedWindow("Trackbars")
cv2.createTrackbar("L - H", "Trackbars", 0, 255, nothing)
cv2.createTrackbar("L - S", "Trackbars", 0, 255, nothing)
cv2.createTrackbar("L - V", "Trackbars", 0, 255, nothing)
cv2.createTrackbar("U - H", "Trackbars", 255, 255, nothing)
cv2.createTrackbar("U - S", "Trackbars", 255, 255, nothing)
cv2.createTrackbar("U - V", "Trackbars", 255, 255, nothing)
while True:
_, frame = cap.read()
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
l_h = cv2.getTrackbarPos("L - H", "Trackbars")
l_s = cv2.getTrackbarPos("L - S", "Trackbars")
l_v = cv2.getTrackbarPos("L - V", "Trackbars")
u_h = cv2.getTrackbarPos("U - H", "Trackbars")
u_s = cv2.getTrackbarPos("U - S", "Trackbars")
u_v = cv2.getTrackbarPos("U - V", "Trackbars")
lower_blue = np.array([l_h, l_s, l_v])
upper_blue = np.array([u_h, u_s, u_v])
mask = cv2.inRange(hsv, lower_blue, upper_blue)
mask2 = cv2.cvtColor(mask, cv2.COLOR_GRAY2BGR)
result = cv2.bitwise_and(frame, frame, mask=mask)
cv2.imshow("frame", frame)
cv2.imshow("mask", mask)
cv2.imshow("result", result)
key = cv2.waitKey(1)
if key == 27:
break
cap.release()
cv2.destroyAllWindows()
输出:
对于我的对象红色 HSV 上限值-[193,188,186],下限值-[135,127,95]
cv2.inRange()
函数只检查if array elements lie between the elements of two other arrays.
因此,如果您的 src
数组形状为 BGR 或 RGB 或 HSV,您的上边界和下边界应该在相同的色彩空间中。通常颜色分割使用的比较多的是HSV颜色空间,但是你也可以试试其他的颜色空间。
我正在尝试为颜色范围创建遮罩。我知道我需要先将图像转换为 HSV,然后再将其传递到 inRange。 inRange 的下两个参数是我们为其创建遮罩的颜色的下限值和上限值。
下部和上部是什么颜色space?
我已经根据此处的答案看到了 HSV 和 BGR。该文档没有调出要使用的特定颜色 space。例如,这个答案 (How to define a threshold value to detect only green colour objects in an image :Opencv) 表示值应该在 HSV 中,但传递的值看起来像 BGR(例如 255)。 PS - 关于 tools/tricks 选择特定范围的任何提示?我一直在使用 Google 的颜色选择器
使用以下代码查找特定对象的 HSV 颜色值。并将此 HSV 值设置为 cv2.inRange 下限值和上限值。这是一个 opencv 程序,使用您的设备摄像头和轨迹栏,您可以找到 HSV 上限和下限值:
import cv2
import numpy as np
def nothing(x):
pass
cap = cv2.VideoCapture(0)
cv2.namedWindow("Trackbars")
cv2.createTrackbar("L - H", "Trackbars", 0, 255, nothing)
cv2.createTrackbar("L - S", "Trackbars", 0, 255, nothing)
cv2.createTrackbar("L - V", "Trackbars", 0, 255, nothing)
cv2.createTrackbar("U - H", "Trackbars", 255, 255, nothing)
cv2.createTrackbar("U - S", "Trackbars", 255, 255, nothing)
cv2.createTrackbar("U - V", "Trackbars", 255, 255, nothing)
while True:
_, frame = cap.read()
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
l_h = cv2.getTrackbarPos("L - H", "Trackbars")
l_s = cv2.getTrackbarPos("L - S", "Trackbars")
l_v = cv2.getTrackbarPos("L - V", "Trackbars")
u_h = cv2.getTrackbarPos("U - H", "Trackbars")
u_s = cv2.getTrackbarPos("U - S", "Trackbars")
u_v = cv2.getTrackbarPos("U - V", "Trackbars")
lower_blue = np.array([l_h, l_s, l_v])
upper_blue = np.array([u_h, u_s, u_v])
mask = cv2.inRange(hsv, lower_blue, upper_blue)
mask2 = cv2.cvtColor(mask, cv2.COLOR_GRAY2BGR)
result = cv2.bitwise_and(frame, frame, mask=mask)
cv2.imshow("frame", frame)
cv2.imshow("mask", mask)
cv2.imshow("result", result)
key = cv2.waitKey(1)
if key == 27:
break
cap.release()
cv2.destroyAllWindows()
输出:
cv2.inRange()
函数只检查if array elements lie between the elements of two other arrays.
因此,如果您的 src
数组形状为 BGR 或 RGB 或 HSV,您的上边界和下边界应该在相同的色彩空间中。通常颜色分割使用的比较多的是HSV颜色空间,但是你也可以试试其他的颜色空间。