色彩空间之HSV空间

HSV 空间

最直观了解一个彩色空间的方法就是了解其通道数,以及每个通道代表什么,还有每个通道的取值为多少,了解之后对于不同空间的转换就能理解并且自己实现一些功能。

HSV通道及其含义

HSV是由三通道组成,
分别是:H代表色调,表示颜色类型种类,取值范围0~179,有时候用一个扇形图表示色彩取值,即0到179映射到0到360度中,如下图
S代表饱和度,也即颜色由深到浅,取值0到255
V代表亮度:表示颜色明暗程度,取值0到255
在这里插入图片描述
图解
在模型2中:
H是色彩点在对应圆形切面上与红色半径(对于H=0度)所形成的圆心角。
V是色彩点所在圆形切面到圆锥顶点的距离。在顶面上V=1 顶点V=0
S是色彩点到所在圆形切面圆心的距离与该圆半径的比例值,在圆锥表面上S=1,在圆心处S=0

在这里插入图片描述

个人理解之RGB与HSV区别

RGB更像是颜色之间的混合得到的东西,其比较难区分同种颜色但是不同亮度及深浅的图像,而HSV只要色调一样,深浅与亮度都是忽略的误差(只需要把深度与亮度的范围调大就行),在opencv中这种颜色空间非常常用

练习,利用HSV空间指定色彩区间抠图

import cv2
import numpy as np

# 在HSV空间对绿屏色彩区域进行阈值处理,生成遮罩进行抠图
img = cv2.imread("hsv.png", flags=1)  # 读取彩色图像

'''
# 颜色空间转化函数,用于将从一个色彩空间转换到另一个色彩空间
'''
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)  # 将图片转换到 HSV 色彩空间

# 使用 cv.inrange 函数在 HSV 空间检查设定的颜色区域范围,转换为二值图像,生成遮罩
lowerColor = np.array([35, 43, 46])  # (下限: 绿色33/43/46)
upperColor = np.array([77, 255, 255])  # (上限: 绿色77/255/255)
'''
inRange函数,设定两个阈值,在这个阈值区间的像素点设置为255,否则为0
'''
binary = cv2.inRange(hsv, lowerColor, upperColor)  # 生成二值遮罩,指定背景颜色区域白色
binaryInv = cv2.bitwise_not(binary)  # 生成逆遮罩,前景区域白色开窗,背景区域黑色
# 对像素点按位与运算,像素点上的值计算时化成二进制数,与自身进行位操作
# 传入两个img就是对两张相同图片位操作,mask是限定位操作的位置,对应非零位置进行位操作
matting = cv2.bitwise_and(img, img, mask=binaryInv)  # 生成抠图图像 (前景保留,背景黑色)
cv2.imshow('over',matting)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 将背景颜色更换为红色: 修改逆遮罩 (抠图以外区域黑色)
imgReplace = img.copy()

imgReplace[binaryInv == 0] = [0, 0, 255]  # 黑色背景区域(0/0/0) 修改为红色 (BGR:0/0/255)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值