问题1:不同的应用程序使用不同的 HSV 尺度。例如 gimp 使用H = 0-360, S = 0-100 and V = 0-100
。但OpenCV使用H: 0-179, S: 0-255, V: 0-255
。这里我在 gimp 中得到的色调值为 22。所以我取了一半,即 11,并为其定义了范围。 IE(5,50,50) - (15,255,255)
.
问题2:而且,OpenCV 使用 BGR 格式,而不是 RGB。因此,更改将 RGB 转换为 HSV 的代码,如下所示:
cv.CvtColor(frame, frameHSV, cv.CV_BGR2HSV)
现在运行它。我得到的输出如下:
希望这就是你想要的。有一些错误检测,但它们很小,因此您可以选择最大的轮廓,即您的眼睑。
EDIT:
As 卡尔·菲利普在他的评论中告诉我们,添加新代码会很好。但只有一行的变化。所以,我想添加在 new 中实现的相同代码cv2
模块,以便用户可以比较新模块的易用性和灵活性cv2
module.
import cv2
import numpy as np
img = cv2.imread('sof.jpg')
ORANGE_MIN = np.array([5, 50, 50],np.uint8)
ORANGE_MAX = np.array([15, 255, 255],np.uint8)
hsv_img = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
frame_threshed = cv2.inRange(hsv_img, ORANGE_MIN, ORANGE_MAX)
cv2.imwrite('output2.jpg', frame_threshed)
它给出与上面相同的结果。但代码要简单得多。