《OpenCV》☞颜色空间

OpenCV中汇集了150多种颜色颜色空间的转变方法,接下来只看最常用的两种,即BGR <--->Gray 和  BGR <--> HSV

import cv2
# color-space转变函数
cv2.cvtColor(input_image, flag)

# 查看颜色空间flag
flags = [i for i in dir(cv2) if i.startswith('COLOR_')]
print flags

'''
note:
对于HSV,Hue(色调)范围为[0,180],Saturation(饱和度)范围是[0,255],Value范围是[0,255]
不同的图像处理软件下具有不同的范围,
如果想将其他如PS中的图像(Hue范围是[0,360])与OpenCV下处理图像作比较时,要做一下归一化
'''

HSV color-space相比RGB color-space更容易表示一个颜色,以下应用中,将提取一个黑色(外框)和一个绿色(内框)的对象。

(1).获取视频每一帧

(2)每一帧从BGR转换颜色空间到HSV

(3)阈值化HSV图像,将其分别阈值化在一个绿色和黑色的范围内

(4)分别提取出黑色目标和蓝色目标,叠加mask合成

Code:

import cv2
import numpy as np

cap = cv2.VideoCapture('../video/VID_20190710_165704.mp4')
ret, fm_0 = cap.read()
c = 1
timeF = 5

# 黑色HSV范围
hsv_black = np.uint8([[[0,0,0],[255,180,46]]])
# 绿色BGR范围
gbr_green = np.uint8([[[13,94,64],[40,114,84]]])
# 绿色HSV范围,将绿色BGR转换到HSV
hsv_green = cv2.cvtColor(gbr_green,cv2.COLOR_BGR2HSV)


while ret:
    ret, fm = cap.read()
    if ret is True:
        hsv_fm = cv2.cvtColor(fm,cv2.COLOR_BGR2HSV)
        # 范围阈值化
        mask_black = cv2.inRange(hsv_fm,hsv_black[0,0],hsv_black[0,1])
        mask_green = cv2.inRange(hsv_fm, hsv_green[0, 0], hsv_green[0, 1])
        # 合成 
        mask = cv2.addWeighted(mask_black,0.5,mask_green,0.5,1)
        # 只提取蓝色和黑色前景
        res = cv2.bitwise_and(fm,fm,mask=mask)
        if c % timeF == 0:
            cv2.namedWindow('res',cv2.WINDOW_NORMAL)
            cv2.imshow('res',res)
            cv2.namedWindow('mask', cv2.WINDOW_NORMAL)
            cv2.imshow('mask',mask)
        c = c+1
        k = cv2.waitKey(10) & 0xff
        if k == 27:
            cv2.destroyAllWindows()

cap.release()

# 注:此图像没考虑去噪过程,随后可将去噪添加进来

结果图:

HSV颜色体系表:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值