Python+OpenCV学习(六)改变颜色空间

内容:

图像颜色空间的转换,例如: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 ]分别作为下界和上界。

 

你可能感兴趣的:(学习)