色彩空间类型转换

一:色彩空间基础

常见的色彩空间包括GRAY(灰度图像)、XYZ、YCrCb、HSV、HLS、CIELab、CIEL*u"*v、Bayer等。

1、GRAY:
通常指8位灰度图,其具有256个灰度级,像素值范围是[0,255]
(1):由RGB色彩空间转GRAY色彩空间时,其标准处理方式为:

       Gray=0.299*R+0.587*G+0.114*B

(2):而GRAY色彩空间转RGB时只需

	   R=G=B=Gray

2、XYZ:
一种更便于计算的色彩空间,可与RGB相互转换(自行查表)

3、YCrCb:
(1):人眼视觉系统(HSV)对颜色的敏感度要低于对亮度的敏感度,在RGB中,RGB三原色具有相同的重要性,忽略了亮度信息。

(2):在YCrCb色彩空间中,Y代表光源的亮度,色彩信息保存在Cr和Cb中,其中,Cr代表红色分量信息,Cb代表蓝色分量信息。亮度给出了颜色亮或暗的程度信息,该信息可以通过照明中强度成分的加权和来计算,在RGB光源中,绿色分量的影响最大,蓝色分量的影响最小。(YCrCb与RGB的相互转换自行查表)

4、HSV:
(1):RGB是从硬件的角度提出的色彩模型,在与人眼的匹配过程中可能存在一定的差 异。HSV是一种面向视觉感知的颜色模型,它从心理学和视觉的角度出发,指出人眼的色彩知觉只要包含三要素:
A:色调(hue,光的颜色,与光的波长有关,范围【0,360】),
B:饱和度(saturation,色彩的深浅程度,与所加白光的数量成反比,范围【0,1】),
C:亮度(value,光的明暗程度,与物体的反射度有关,白色越多,亮度越亮,黑色越多,亮度越低,范围【0,1】)。

(2):从RGB转HSV前,需要将RGB色彩空间的值转换到【0,1】,具体细节自行查表

在8位图像内,每个像素点所能代表的灰度级只有256个,所以8位图表示HSV图像时,需要将其映射到【0,255】之间,在opencv中,是将H【0,360】直接除以2映射到【0,180】以便于8位二进制的存储与表示范围。而S【0,1】,V【0,1】是直接映射到【0,255】范围内

如:H=120(绿色),S=0.3,V=0.4,则当前色彩为:浅绿色,颜色较暗

在hsv中,每个色调值对应一个指定颜色,与饱和度及亮度无关。所以通过对H通道值的筛选,可以得到特定的颜色。

(3):在HSV色彩空间内进行分量值的调整能够生成一些有趣的效果,一些图像处理软件正是利用HSV色彩空间内的值的调整实现艺术效果的,如改变S通道提升饱和度,改变V通道提升亮度等。

import cv2
import numpy as np

img=cv2.resize(cv2.imread("D:/my project/opencv3/chapter_1/img/2.jpg"),(200,200))
hsv_img=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
#cv2.inRange(src,min,max)函数用于指定范围,若src在[min,max]之间,则对应位置上保持不变,否则为0

#指定蓝色,其色调在8位二进制中约对应[120,140](即在hsv模式自身约对应[240,280]),为了便于观察,亮度和饱和度都选大于50的值
min_blue=np.array([120,50,50])
max_blue=np.array([140,255,255])
blue_mask=cv2.inRange(hsv_img,min_blue,max_blue)
cv2.imshow("blue_mask",blue_mask)
#同一张图按位与得到原图,加掩码(此处"mask="不能省,因为函数有多个可选参数)后,只保留掩码对应位置上不为0的值
blue_img=cv2.bitwise_and(img,img,mask=blue_mask)
#指定黄色
min_yellow=np.array([10,50,50])
max_yellow=np.array([30,255,255])
yellow_mask=cv2.inRange(hsv_img,min_yellow,max_yellow)
yellow_img=cv2.bitwise_and(img,img,mask=yellow_mask)
#指定绿色
min_green=np.array([70,50,50])
max_green=np.array([90,255,255])
green_mask=cv2.inRange(hsv_img,min_green,max_green)
green_img=cv2.bitwise_and(img,img,mask=green_mask)

blue_mask=cv2.cvtColor(blue_mask,cv2.COLOR_GRAY2RGB)
image_names=[img,hsv_img,blue_mask,blue_img,yellow_img,green_img]

black=255*np.ones((200*2,200*3,3),np.uint8)
count=0
for i in range(2):
    for j in range(3):
        black[i*200:(i+1)*200,j*200:(j+1)*200]=image_names[count]
        count+=1
        if count>5:
            break
cv2.imshow("black",black)
cv2.imwrite("D:/my project/opencv3/save_image/merge_image.jpg",black)
cv2.waitKey()

在这里插入图片描述
上图从左到右从上到下,以次为原图,hsv模式图,蓝色掩码,从原图中提取的蓝色、黄色、绿色。

5、alpha通道
在RGB色彩空间的基础上,还可以加一个A通道,也叫alpha通道,表示透明度,其中png图像就是典型的4通道RGBA图像,alpha的范围[0,1]或[0,255],表示从透明到不透明,A通道的默认值为255,不同A的图像在显示时是没有差别的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值