重要的函数:
HSV颜色图像
这个模型中颜色的参数分别是:色调(H),饱和度(S),明度(V)
色调H:
用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,紫色为300°
饱和度S:
饱和度S表示颜色接近光谱色的程度。一种颜色,可以看成是某种光谱色与白色混合的结果。其中光谱色所占的比例愈大,颜色接近光谱色的程度就愈高,颜色的饱和度也就愈高。饱和度高,颜色则深而艳。光谱色的白光成分为0,饱和度达到最高。通常取值范围为0%~100%,值越大,颜色越饱和。
明度V:
明度表示颜色明亮的程度,对于光源色,明度值与发光体的光亮度有关;对于物体色,此值和物体的透射比或反射比有关。通常取值范围为0%(黑)到100%(白)。
RGB和CMY颜色模型都是面向硬件的,而HSV(Hue Saturation Value)颜色模型是面向用户的。
HSV模型的三维表示从RGB立方体演化而来。设想从RGB沿立方体对角线的白色顶点向黑色顶点观察,就可以看到立方体的六边形外形。六边形边界表示色彩,水平轴表示纯度,明度沿垂直轴测量。
cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
创造一个滑动条
cv2.createTrackbar(“scale”, “display”, 0, 100, self.opencv_calibration_node.on_scale)
- 第一个参数时滑动条的名字,
- 第二个参数是滑动条被放置的窗口的名字,
- 第三个参数是滑动条默认值,
- 第四个参数时滑动条的最大值,
- 第五个参数时回调函数,每次滑动都会调用回调函数。
def empty(a):
pass
cv2.namedWindow("TrackBars")
cv2.resizeWindow("TrackBars",640,240)
cv2.createTrackbar("Hue Min","TrackBars",0,179,empty)
cv2.createTrackbar("Hue Max","TrackBars",179,179,empty)
cv2.createTrackbar("Sat Min","TrackBars",0,255,empty)
cv2.createTrackbar("Sat Max","TrackBars",255,255,empty)
cv2.createTrackbar("Val Min","TrackBars",0,255,empty)
cv2.createTrackbar("Val Max","TrackBars",255,255,empty)
绑定参数
cv2.getTrackbarPos()
while True:
h_min=cv2.getTrackbarPos("Hue Min","TrackBars")
h_max=cv2.getTrackbarPos("Hue Max","TrackBars")
s_min=cv2.getTrackbarPos("Sat Min","TrackBars")
s_max=cv2.getTrackbarPos("Sat Max","TrackBars")
v_min=cv2.getTrackbarPos("Val Min","TrackBars")
v_max=cv2.getTrackbarPos("Val Max","TrackBars")
print(h_min,h_max,s_min,s_max,v_min,v_max) #实时打印参数
拖动滑条来改变HSV图像
bitwise_and(src1, src2, dst=None, mask=None)
- src1、src2:为输入图像或标量,标量可以为单个数值或一个四元组
- dst:可选输出变量,如果需要使用非None则要先定义,且其大小与输入变量相同
- mask:图像掩膜,可选参数,为8位单通道的灰度图像,用于指定要更改的输出图像数组的元素,即输出图像像素只有mask对应位置元素不为0的部分才输出,否则该位置像素的所有通道分量都设置为0
lower = np.array([h_min,s_min,v_min])
upper = np.array([h_max,s_max,v_max])
mask = cv2.inRange(imgHSV,lower,upper)
imgResult = cv2.bitwise_and(img,img,mask=mask) #对图像(灰度图像或彩色图像均可)每个像素值进行二进制“与”操作
模块:
import cv2
import numpy as np
def empty(a):
pass
path = 'xxx'
cv2.namedWindow("TrackBars")
cv2.resizeWindow("TrackBars",640,240)
cv2.createTrackbar("Hue Min","TrackBars",0,179,empty)
cv2.createTrackbar("Hue Max","TrackBars",179,179,empty)
cv2.createTrackbar("Sat Min","TrackBars",0,255,empty)
cv2.createTrackbar("Sat Max","TrackBars",255,255,empty)
cv2.createTrackbar("Val Min","TrackBars",0,255,empty)
cv2.createTrackbar("Val Max","TrackBars",255,255,empty)
while True:
img = cv2.imread(path)
imgHSV = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
h_min=cv2.getTrackbarPos("Hue Min","TrackBars")
h_max=cv2.getTrackbarPos("Hue Max","TrackBars")
s_min=cv2.getTrackbarPos("Sat Min","TrackBars")
s_max=cv2.getTrackbarPos("Sat Max","TrackBars")
v_min=cv2.getTrackbarPos("Val Min","TrackBars")
v_max=cv2.getTrackbarPos("Val Max","TrackBars")
print(h_min,h_max,s_min,s_max,v_min,v_max)
lower = np.array([h_min,s_min,v_min])
upper = np.array([h_max,s_max,v_max])
mask = cv2.inRange(imgHSV,lower,upper)
imgResult = cv2.bitwise_and(img,img,mask=mask)
cv2.imshow("Original",img)
cv2.imshow("HSV",imgHSV)
cv2.imshow("Mask",mask)
cv2.imshow("Result",imgResult)
cv2.waitKey(1)