OpenCV-Python实战(3)——图像颜色

一、色彩空间

1.1 GRAY色彩空间

  • GARY色彩空间(灰度图像)通常指8位灰度图,具有256个灰度级,像素值的范围是[0,255]。不同数值表示不同程度的灰色。像素值越低,灰色越深。0表示纯黑色,255表示纯白色。
  • GARY色彩空间为单通道,所以通常用二维数组表示一幅灰度图像。

1.2 RGB色彩空间

  • RGB色彩空间中的所有颜色都可以通过将R(red)红色、G(green)绿色、B(blue)蓝色三个色彩通道按照一定比例混合得到。每个色彩通道值的范围都在[0,255]之间。

1.3 HSV色彩空间

  • 它提出人眼的色彩知觉的三要素:H:色调(Hue)S:饱和度(Saturation)V:亮度(Value)。
    色调(H):色调是色彩的基本属性,就是平常说的颜色的名称,如“赤橙黄绿青蓝紫”等。色调的取值区间为[0,360]。色调取不同值,所代表的颜色不同。
  • 饱和度(S):饱和度指色彩的纯度,通俗的说就是颜色的深浅。饱和度越高色彩越纯,饱和度越低则逐渐变灰。取值范围为0~100%。在OpenCV内,取值范围为0~255。
  • 亮度(V):表示色彩亮度,取值区间是0~100%。在OpenCV内,依据公式映射到0~255范围内。 当亮度值为0时,图象是纯黑色。
GRAYRGBHSV
色彩空间
参数gray:0~255

R:0~255

G:0~255

B:0~255

H:0~255

S:0~255

V:0~255

量级256256*256*256256*256*256

二、色彩转换

image = cv2.cvtColor(src, code)

image:色彩转换cv2.cvtColor()函数返回的目标函数。

src:要转换的图像对象。

code:色彩转换参数(进行何种色彩转换),常见的参数如下表:

参数(A为透明度通道)解释
COLOR_BGR2BGRA0BGR转换为BGRA
COLOR_BGRA2BGR1BGRA转换为BGR
COLOR_BGR2RGBA2BGR转换为RGBA
COLOR_RGBA2BGR3RGBA转换为BGR
COLOR_BGR2RGB4BGR转换为RGB
COLOR_BGR2GRAY6BGR转换为GRAY
COLOR_RGB2GRAY7RGB转换为GRAY
COLOR_GRAY2BGR8GRAY转换为BGR
COLOR_BGR2HSV40BGR转换为HSV
COLOR_RGB2HSV41RGB转换为HSV
COLOR_HSV2BGR54HSV转换为BGR
COLOR_HSV2RGB55HSV转换为RGB
# 示例:
import cv2

img = cv2.imread('Lena.png')  # BGR
cv2.imshow('img_bgr',img)
img_gray = cv2.cvtColor(img.copy(), cv2.COLOR_BGR2GRAY)  # BGR 转 GRAY
cv2.imshow('img_gray',img_gray)
img_rgb = cv2.cvtColor(img.copy(), cv2.COLOR_BGR2RGB)  # BGR 转 RGB
cv2.imshow('img_rgb',img_rgb)
img_hsv = cv2.cvtColor(img.copy(), cv2.COLOR_BGR2HSV)  # BGR 转 HSV
cv2.imshow('img_hsv',img_hsv)

cv2.waitKey(0)
cv2.destroyAllWindows()

三、通道拆分与合并 

拆分:cv2.split()

 B , G , R = cv2.split(bgr_image)

bgr_image:BGR图像对象。

cv2.split():图像对象通道拆分函数。

B , G , R :图相拆分后返回的对应通道对象。

合并:cv2.merge()

image = cv2.merge([B,G,R])

 [B , G , R]或(B , G , R):B , G , R 通道图像对象。(合并结果与顺序有关

import cv2

# 拆分
img = cv2.imread('Lena.png')  # BGR
cv2.imshow('BGR',img)
B , G , R = cv2.split(img)
cv2.imshow('B',B)
cv2.imshow('G',G)
cv2.imshow('R',R)
# 合并
img_rgb = cv2.merge((R,G,B))
cv2.imshow('img_rgb',img_rgb)

cv2.waitKey(0)
cv2.destroyAllWindows()

四、修改通道数值

HSV图像的H、S、V通道,以及图片透明度 A 通道(透明度) 数值的改变会对图片色彩产生较大的影响。

这里以修改 H 通道对BGR格式图片的影响为示例:

import cv2

# 拆分
img = cv2.imread('Lena.png')  # BGR
cv2.imshow('BGR',img)
img_hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
cv2.imshow('img_hsv',img_hsv)
H , S , V = cv2.split(img_hsv)
# 通道数值调整
H = H[:,:] + 200  # 由于‘红、橙、黄、绿、蓝、靛、紫’的顺序,H越大BGR格式色调会变化。
# 合并
img_HSV = cv2.merge((H,S,V))
cv2.imshow('img_HSV',img_HSV)  # 先合并为 HSV 格式
img_BGR = cv2.cvtColor(img_HSV,cv2.COLOR_HSV2BGR)
cv2.imshow('img_BGR',img_BGR)

cv2.waitKey(0)
cv2.destroyAllWindows()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小码贾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值