opencv学习笔记及复习(四)物体追踪及人体肤色追踪

一、BGR颜色空间

在opencv中,硬件所使用的颜色顺序为BGR,而非RGB,虽然排序有所不同,但是在进行图像操作的时候会有很大的区别,BGR颜色空间分别对应蓝、绿、红;这三种颜色的排列组合可以组成人眼所看到的所有颜色,如图2.1:

opencv学习笔记及复习(四)物体追踪及人体肤色追踪_第1张图片

 

二、HSV颜色空间

HSV分别对应色度、饱和度、亮度,HSV颜色空间数据分明,适合计算机处理数据,HSV是一种比较直观的颜色模型,所以在许多图像编辑工具中应用比较广泛。因此,一般在做图像处理的时候,都会把BGR转化成HSV[3]。其表示如图2.2:

        opencv学习笔记及复习(四)物体追踪及人体肤色追踪_第2张图片

 三、API:cv.cvtColor  色彩空间转化API

第一个参数frame是图片数据,第二个参数为转化参数有

cv.COLOR_BGR2GRAY:BGR转灰色空间,就是灰白图片
cv.COLOR_BGR2HSV:BGR转HSV
cv.COLOR_BGR2YUV :BGR转YUV色彩空间

这些参数中把其中颜色空间的顺序调换就可以转回BGR,如cv.COLOR_GRAY2BGR

hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)

四、颜色追踪(物体追踪)

1.定义掩摸(面具)mask

HSV颜色取值范围表

绿

hmin

0

0

0

0

156

11

26

35

78

100

hmax

180

180

180

10

180

25

34

77

99

124

smin

0

0

0

43

43

43

43

43

43

43

smax

255

43

30

255

255

255

255

255

255

255

vmin

0

46

221

46

46

46

46

46

46

46

vmax

46

220

255

255

255

255

255

255

255

255

mask = cv.inRange(hsv, lowerb = lower_hsv, upperb = upper_hsv) 

 cv.inRange:确定颜色取值的范围(下面是红色的HSV颜色范围取值)

lower_hsv = np.array([156, 43, 46])   #定义hsv空间的三个最低值
upper_hsv = np.array([180, 255, 255]) #定义hsv空间的三个最高值
cv.bitwise_and:逻辑与,就是把他里面所有的参数都相与
cv.bitwise_and(frame, frame, mask=mask)

之后调用摄像头只直接显示就可以了,完整代码如下

def extrace_object_demo():
    capture = cv.VideoCapture(0)
    while(True):
        ret, frame = capture.read()
        if ret == False:
            break
        hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
        lower_hsv = np.array([156, 43, 46])   #定义hsv空间的三个最低值
        upper_hsv = np.array([180, 255, 255]) #定义hsv空间的三个最高值
        mask = cv.inRange(hsv, lowerb = lower_hsv, upperb = upper_hsv)       #inRange取颜色范围,,现取红色区域
        cv.imshow("video", hsv)       #显示hsv图像
        red_mask = cv.bitwise_and(frame, frame, mask=mask)         #使用逻辑与取出红色区域
        cv.imshow("new video", red_mask)  #显示图像中的红色区域
        c = cv.waitKey(40)
        if c == 27:
            break
extrace_object_demo()
cv.waitKey(0)
cv.destroyAllWindows()

 实验结果(我这里不使用摄像头了,我网上找了一个穿红衣服跳舞的视频)

视频我放在根目录下,只是把摄像头0改成了视频路径,更改的代码

capture = cv.VideoCapture('3.mkv')

opencv学习笔记及复习(四)物体追踪及人体肤色追踪_第3张图片

 五、肤色追踪(人脸检测)

黄色人体肤色范围

lower_red=np.array([0,30,60])

 upper_red=np.array([20,150,255])

然后把这些数值带入上面的代码就可以了

实验结果就不放出来了,人长得丑,自己实验就知道了。

你可能感兴趣的:(opencv,计算机视觉,人工智能)