hsv opencv 饱和度_在HSV色彩空间下检测颜色
在HSV色彩空间下检测颜色
哈喽,大家好呀,我是滑稽君。还记得上一期我们提到的颜色检测的方法吗?本期我们就来详细的聊一聊如何利用opencv进行颜色检测。
视频讲解:
下图为HSV的色调盘。

我们知道H代表色调,S代表饱和度,V代表明度。那么当我们选取一个主色调如黄色,则S和V对应的关系如下图。

可以理解为在Hue一定的情况下,饱和度减小,就是往光谱色中添加白色,光谱色所占的比例也在减小,饱和度减为0,表示光谱色所占的比例为零,导致整个颜色呈现白色。明度减小,就是往光谱色中添加黑色,光谱色所占的比例也在减小,明度减为0,表示光谱色所占的比例为零,导致整个颜色呈现黑色。
我们在opencv里处理时,需要先把图像转换成HSV格式。之后用到createTrackbar()和getTrackbarPos()方法。前者在窗口中生成滑块,这样我们可以实时的控制值的大小方便记录,后者用来接收对应滑块返回的值,注意这只完成了对滑块值的实时检测,我们还需要把返回的值交给inRange()让它为我们保留范围内的色彩。下面我们上代码。
源代码:
import cv2import numpy as npframeWidth = 340frameHeight = 280cap = cv2.VideoCapture(1)cap.set(3, frameWidth)cap.set(4, frameHeight)cap.set(10,150)#设置回调函数,这里不需要所以passdef empty(a): passcv2.namedWindow("HSV")cv2.resizeWindow("HSV",640,240)cv2.createTrackbar("HUE Min","HSV",0,179,empty)cv2.createTrackbar("SAT Min","HSV",0,255,empty)cv2.createTrackbar("VALUE Min","HSV",0,255,empty)cv2.createTrackbar("HUE Max","HSV",179,179,empty)cv2.createTrackbar("SAT Max","HSV",255,255,empty)cv2.createTrackbar("VALUE Max","HSV",255,255,empty)while True: _, img = cap.read() imgHsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV) h_min = cv2.getTrackbarPos("HUE Min","HSV") h_max = cv2.getTrackbarPos("HUE Max", "HSV") s_min = cv2.getTrackbarPos("SAT Min", "HSV") s_max = cv2.getTrackbarPos("SAT Max", "HSV") v_min = cv2.getTrackbarPos("VALUE Min", "HSV") v_max = cv2.getTrackbarPos("VALUE Max", "HSV") lower = np.array([h_min,s_min,v_min]) upper = np.array([h_max,s_max,v_max]) mask = cv2.inRange(imgHsv,lower,upper) result = cv2.bitwise_and(img,img, mask = mask) mask = cv2.cvtColor(mask, cv2.COLOR_GRAY2BGR) #3个结果并排放在一起。 hStack = np.hstack([img,mask,result]) cv2.imshow('Horizontal Stacking', hStack) if cv2.waitKey(1) & 0xFF == ord('q'): breakcap.release()cv2.destroyAllWindows()
生成的滑块条:

检测窗口:
检测红色的笔

依次为img(原图),mask和大家熟悉的与运算(and)结果。
红色对应的值应为:

我将在视频中为大家演示如何快速的捕捉到自己想要的颜色。
同样的方法把值放入上期代码可得到如下结果。

如下,色彩值部分,与笔尖颜色设置应一一对应。否则将返回错误的颜色。
#上期代码中色彩值部分myColors = [[77,149,137,83,255,255], [168,133,190,179,255,255], [91,157,140,102,255,255]]#笔触颜色myColorValues = [[0,255,0], [0,0,255], [255,0,0]]
我将在视频中为大家展示如何快速的捕捉到我们想要的颜色。
本期素材来自国外的《Learn-OpenCV-in-3-hours-master》教学视频。
❂ END
上期传送门:opencv通过摄像头捕捉指定物体
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)