内容:
图像颜色空间的转换,例如:BGR图与灰度图转换,BGR图与HSV转换等。
除此之外,我们会创建一个提取物品颜色的视频处理程序。这包括cv.cvtColor(),cv.inRange()等函数。
改变颜色空间
最常用的颜色空间转变是: BGR图与灰度图转换,BGR图与HSV转换
我们用函数cv.cvtColor(input_image, flag)来进行颜色转换,flag决定转换的类型。
BGR转Gray用的flag是cv.COLOR_BGR2GRAY。BGR转HSV的flag是cv.COLOR_BGR2HSV。
物品追踪
现在我们知道如何将BGR图像转换成HSV,我们可以用它来提取有色物体。HSV模型比BGR模型更容易表征颜色空间。在我们的程序中,我们将尝试提取一个蓝色的物体。
l 提取视频的每一帧
l 把BGR模型转为HSV模型
l 设置HSV模型中蓝色的阈值
l 提取蓝色物体。
Demo:
# coding=utf-8
import cv2 as cv
import numpy as np
cap = cv.VideoCapture(0)
while(1):
#提取视频的每一帧
_, frame = cap.read()
#把BGR转为HSV
hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
#定义蓝色在HSV模型中的范围
lower_blue = np.array([100,50,50])
upper_blue = np.array([130,255,255])
#只提取HSV中的蓝色并二值化
mask = cv.inRange(hsv, lower_blue, upper_blue)
#原图像与mask图像按位与
res = cv.bitwise_and(frame,frame, mask= mask)
cv.imshow('frame',frame)
cv.imshow('mask',mask)
cv.imshow('res',res)
k= cv.waitKey(5) & 0xFF
ifk == 27:
break
cv.destroyAllWindows()
取得HSV中的颜色值
可以用cv.cvtColor().函数很容易得到。不需要通过图像,可以通过BGR值来获得。例如提取HSV中的绿色值:
# coding=utf-8
import cv2 as cv
import numpy as np
green = np.uint8([[[0,255,0 ]]])
hsv_green =cv.cvtColor(green,cv.COLOR_BGR2HSV)
print( hsv_green )
# [[[ 60 255 255]]]
可以把[H-10,100, 100 ]和[H+ 10, 255, 255 ]分别作为下界和上界。