检测视频中特定颜色

简要描述

这章是检测视频中的特定颜色,代码中检测的是蓝色的。经尝试可用。

步骤

● 设置“蓝色”HSV范围
● BGR转HSV
● 捕获摄像头视频
● 获取蓝色部分mask
● 图像按位与操作
● 显示蓝色部分图像

知识点

HSV(Hue , Saturation , Value):色调,饱和度,明度
色度H:用角度度量,取值范围为0~360,红色开始按逆时针方向计算,红色为0度,绿色为120度,蓝色为240度
饱和度S:接近光谱色的程度,颜色可以看成是光谱色与白色混合结果,光谱色占的比例愈大,颜色接近光谱色的程度越高,颜色饱和度就越高。光谱色中白色成分为0,饱和度达到最高,取值范围0%~100%,值越大,颜色越饱和
明度V:表示颜色明亮的程度,对于光源色,明度值与发光体的光亮度有关;对于物体色,与物体的透射比有关,取值 范围为0%(黑)~100%(白)
RGB面向硬件,HSV面向用户
在Opencv中 ,H色度取值范围是[0,179] ,S饱和度的取值范围是[0,255] ,V明度的取值范围是[0,255]
拿opencv的HSV值与其他软件的HSV值进行对比时,要归一化

主要函数

BGR转HSV:cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)

获取蓝色部分mask:mask = cv2.inRange(hsv,lower_blue,upper_blue)

图像按位与操作:res = cv2.bitwise_and(frame,frame,mask=mask)

代码

import cv2
import numpy as np

cap = cv2.VideoCapture(0)

#画出蓝色的范围
lower_blue = np.array([78,43,46])
upper_blue = np.array([110,255,255])

while(1):
    ret,frame = cap.read()
    cv2.imshow("capture",frame)

    #转换成hsv
    hsv = cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)
    cv2.imshow("HSV",hsv)

    ''''' 
            cv2.inRange(src , lowerb , upperb[,dst]) 
            作用:更改函数对某个单通道中的元素检查其值是否在范围中 
            src:输入数组,lowerb:包含低边界的数组,upperb:包含高边界的数组,dst:输出数组 
            如果src(I)符合范围,则dst(I)被设置为255,也就是说dst返回的是非黑即白的图像,而且符合要求 
             的部分是白色的 
            '''
    # 构建物体掩膜(黑白部分),注意这里要使用hsv
    mask = cv2.inRange(hsv,lower_blue,upper_blue)
    cv2.imshow("MASK",mask)

    #对原图像和掩膜进行位运算
    res = cv2.bitwise_and(frame,frame,mask=mask)
    cv2.imshow("result",res)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

参考:
【1】http://blog.csdn.net/huanglu_thu13/article/details/52346578#15-python-opencv-检测特定颜色
【2】http://blog.csdn.net/qingyuanluofeng/article/details/51582137

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章