opencv图像处理色彩空间与通道

1.GRAY色彩空间

GRAY 通道代表灰度图像,灰度图像是每个像素都是聪黑到白被处理为256个灰度级别的单色图像,这256个灰度级别分别用区间[0,255]

其中“0”,表示纯黑色,“255”,表示纯白色,0~255的数值表示不同亮度(即色彩的深浅程度)的深灰色或浅灰色。

a=cv2.cvtColor(src,code)#色彩空间转换

ser:转换前的初始图像。

code:色彩空间转换码

import cv2
a=cv2.imread("170.jpg")
b=cv2.cvtColor(a,cv2.COLOR_BGR2GRAY)#转换灰度通道
cv2.imshow("bq",b)
cv2.waitKey()
cv2.destroyAllWindows()
2.HSV色彩空间

HSV色彩空间是基于三基色而言的,三基色指红绿蓝,HSV是基于色调,饱和度,亮度而言的,其中色调(H),指光的颜色,赤橙黄绿青蓝紫分别表示不同的色调,在opencv中,色调区间在[0~180]内取值,红黄绿蓝的色调为0,30,60,120。饱和度(S)指色彩的深浅,饱和度在[0,255],内取值,当饱和度为0时图像为灰度图。亮度(V),表示光的明暗,亮度在[0~255]内取值,值越大,图像越亮,当值为0时图像为纯黑色。

3.从BGR色彩空间,转换为HSV色彩通道

cv2.cvtColor(实例化对象,要转换的通道)

import cv2
mlj=cv2.imread("H:\python\opencv\CV\Bqi.jpg")
hsv_mlj=cv2.cvtColor(mlj,cv2.COLOR_BGR2HSV)#将BGR通道转变换为HSV通道,cv2.COLOR_HSV2BGR为hsv转化为BGR
cv2.imshow('shv',hsv_mlj)
cv2.waitKey()
cv2.destroyAllWindows()
3.通道的拆解

图像的通道由B通道G通道R通道构成

拆分通道使用split()方法

split拆解BGR通道的语法

b,g,r=split(bgr_imgar)

b:蓝色通道

g:绿色通道

r:红色通道

bgr_imgar:一副BGR图片

import cv2 as c
mlj=c.imread("xqiao.jpg")
b,g,r=c.split(mlj)#拆解BGR色彩通道其颜色都为灰度
c.imshow('B',b)
c.imshow('G',g)
c.imshow('R',r)
c.waitKey()

split拆解HSV通道的语法

h,s,v=split(hsv_imgar)

h:色调

s:饱和度

v:亮度

hsv_imgar:一张hsv图像

4.通道的合并

合并色彩通道是拆解通道的逆向操作其操作函数及语法如下:

合并bgr色彩通道

merge()方法

语法:bgr=cv2.merge([b,g,r])

bgr--合并之后的图像,

b--蓝色通道

g--蓝色通道

r--红色通道

import cv2 as c
imgage=c.imread("170.png")
blue,green,red=c.split(imgage)#拆分色彩通道
bgr=c.merge([blue,green,red])#合并色彩通道
c.imshow("bgr",bgr)
c.waitKey()

合并hsv色彩通道语法

hsv=cv2.merge[h,s,v]

hsv--合并的图像

h--色调

s--饱和度

v--亮度

综合

import cv2
import cv2 as c
image=c.imread("xqiao.jpg")
hsv_img=c.cvtColor(image,cv2.COLOR_BGR2HSV)
h,s,v=c.split(hsv_img)
#h[:,:]=180#修改色调
#s[:,:]=255#修改饱和度
v[:,:]=255#修改亮度
hsv=c.merge([h,s,v])
#cv2.imshow('hsv',hsv)
new=cv2.cvtColor(hsv,c.COLOR_HSV2BGR)
c.imshow('new',new)
c.waitKey()
c.destroyAllWindows()
'''
综合:读取bgr图片,
修改通道为hsv,
将hsv通道拆解,
更改hsv通道的某一通道,
将拆解的通道合并,
再将hsv通道转换为bgr将图象释放
'''

bgr色彩通道,包含了3个通道,即蓝,绿,红,cv在这三个通道的基础上又加了一个通道,即alpha通道(透明度),这样就形成:蓝色,绿色,红色,透明度(b,g,r,a)的色彩空间,a的取值区间为[0,255],0表示透明,255表示不透明

import cv2 as c
img=c.imread("xqiao.jpg")
image=c.cvtColor(img,c.COLOR_BGR2BGRA)
#c.imshow("img",image)
b,g,r,a=c.split(image)
a[:,:]=172
bgra_172=c.merge([b,g,r,a])
a[:,:]=0
bgra_0=c.merge([b,g,r,a])
# c.imshow("172",bgra_172)
# c.imshow("0",bgra_0)
c.imwrite(r'H:\python\opencv\CV\170.png',bgra_172)
c.imwrite(r'H:\python\opencv\CV\0.png',bgra_0)
c.waitKey()
'''
更改alpha通道后用imshow()方法图片没有变化
要保存才可以显示效果
切记要以png格式保存才有效果
'''
5.小结

当使用cvtClolor()方法转换色彩通道时,虽然色彩图像能转换为灰度图像,但是灰度图像不能转换为色彩图像。对于hsv色彩空间,如果保持其中两个通道的值不变,调整第3个通道的值,会得到相应的艺术效果。为了能显示艺术效果,要把合并通道后的图像从hsv色彩空间转化为bgr色彩空间。当使用alpha通道修改图像的透明读时,为了更直观地看到效果要将修改透明度的图片以png的格式保存

此篇博客代码修改文件图片后可直接执行(注意注释的内容)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值