本章简明
色彩空间:
GRAY色彩空间:cv2.COLOR_BGR2GRAY
HSV色彩空间: cv2.COLOR_BGR2HSV 、cv2.COLOR_HSV2BGR
通道:
拆分通道:split()方法
合并通道:merge()方法
综合运用拆分通道和合并通道
alpha通道
色彩空间转换方法
dst=cv2.cvtColor(src,code)
参数:
src : 转换前的初始图像
code : 色彩空间转换码。
返回值:
dst : 转换后的图像
将BGR色彩空间转换到GRAY色彩空间时,常用色彩空间转换码是 cv2.COLOR_BGR2GRAY
HSV色彩空间常用 .COLOR_BGR2HSV 、cv2.COLOR_HSV2BGR
GRAY色彩空间
GRAY色彩空间指的就是灰度图,灰度图只有一个色彩通道。灰度图像每个像素都是从黑到白,被分为256个灰度级别,0表示纯黑,1表示纯白。0~255的数值表示不同亮度(即色彩的深浅程度)的深灰色或浅灰色。
示例:将一张彩色图片转换为灰度图片
import cv2
import numpy as np
image = cv2.imread("D:/python_learn/opencv_learn/2.png")
image2=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
cv2.imshow("text",image2)
cv2.waitKey()
cv2.destroyAllWindows()
输出:
HSV色彩通道
BGR空间是基于三基色(红绿蓝)而言的,而HSV色彩空间是基于色调、饱和度和亮度而言的。
色调 H:指的是光的颜色,如彩虹中的赤橙黄绿青蓝紫,分别表示不同的色调。在openCV中色调区间在[0,180]间取
值。例如红色、黄色、绿色、蓝色的色调值分别为,0、30、60、120
饱和度 S :指的是色彩的深浅,在openCV中饱和度在区间[0,255]内取值,当饱和度为0时图像将变为灰度图像
亮度 V: 指光的明暗,在openCV中亮度取值范围为[0,255],取值越大亮度越强。当亮度值为0时图像呈现纯黑色
将BGR色彩空间转换为HSV色彩空间
import cv2
import numpy as np
image = cv2.imread("D:/python_learn/opencv_learn/2.png")
image3=cv2.cvtColor(image,cv2.COLOR_BGR2HSV)
image4=cv2.cvtColor(image3,cv2.COLOR_HSV2BGR)
cv2.imshow("BGR",image)
cv2.imshow("HSV",image3)
cv2.imshow("HSV->BGR",image4)
cv2.waitKey()
cv2.destroyAllWindows()
print("text")
输出:
通道
拆分通道
1、拆分BGR图像中的通道
b,g,r=cv2.split(bgr_image)
参数:
bgr_image : 一副BGR图像
返回值:
b :B 通道
g :G 通道
r :R 通道
示例:拆分一副BGR图像中的通道
import cv2
import numpy as np
image = cv2.imread("D:/python_learn/opencv_learn/2.png")
b,g,r=cv2.split(image)
cv2.imshow("B",b)
cv2.imshow("G",g)
cv2.imshow("R",r)
# 另一种方法
# b = img[:, :, 0]
# g = img[:, :, 1]
# r = img[:, :, 2]
cv2.waitKey()
cv2.destroyAllWindows()
输出
2、拆分HSV图像中的通道
h,s,v=cv2.split(hsv_image)
参数:
bgr_image : 一副BGR图像
返回值:
h :H 通道
s :S 通道
v :V 通道
示例:拆分一副HSV图像中的通道
import cv2
import numpy as np
image = cv2.imread("D:/python_learn/opencv_learn/2.png")
image2=cv2.cvtColor(image,cv2.COLOR_BGR2HSV)
h,s,v=cv2.split(image2)
cv2.imshow("BGR",image)
cv2.imshow("HSV",image2)
cv2.imshow("H",h)
cv2.imshow("S",s)
cv2.imshow("V",v)
cv2.waitKey()
cv2.destroyAllWindows()
输出:
合并通道
1、合并BGR色彩通道
bgr_image=cv2.merge([b,g,r])
参数:
b,g,r分别对应色彩通道
返回值:
合并通道后得到的BGR图片
示例:合并BGR通道
import cv2
import numpy as np
image = cv2.imread("D:/python_learn/opencv_learn/2.png")
b,g,r=cv2.split(image)
image2=cv2.merge([b,g,r])
cv2.imshow("BGR",image2)
cv2.waitKey()
cv2.destroyAllWindows()
输出:
1、合并HSV通道
方法同merge
import cv2
import numpy as np
image = cv2.imread("D:/python_learn/opencv_learn/2.png")
image2=cv2.cvtColor(image,cv2.COLOR_BGR2HSV)
h,s,v=cv2.split(image2)
image2=cv2.merge([h,s,v])
cv2.imshow("HSV",image2)
cv2.waitKey()
cv2.destroyAllWindows()
输出
综合运用
将一副BGR图片转换为HSV图片,提取出HSV图片的H,S,V同通道,将H通道全部设置为180.然后在合并通道得到一张新的HSV图片,再将得到的HSV图片转换为BGR图片,并存储在文件中。
import cv2
import numpy as np
image = cv2.imread("D:/python_learn/opencv_learn/2.png")
image2=cv2.cvtColor(image,cv2.COLOR_BGR2HSV)
h,s,v=cv2.split(image2)
h[:,:]=180
image2=cv2.merge([h,s,v])
image3=cv2.cvtColor(image2,cv2.COLOR_HSV2BGR)
cv2.imwrite("E:hello_world/HSV.png",image3)
cv2.imshow("HSV->BGR",image3)
cv2.waitKey()
cv2.destroyAllWindows()
输出:
alpha通道
BGR色彩空间包含了三个通道,即B通道,G通道,R通道,openCV在此基础上有增加了A通道,此通道表示的是透明度。取值范围是[0,255],0表示全透明,255表示不透明
示例:将一张图片转换为半透明
注意:imshow显示方法,无法显示转换后的半透明图像,显示任然为全透明。但可保存文件查看
import cv2
image = cv2.imread("D:/python_learn/opencv_learn/2.png")
image2=cv2.cvtColor(image,cv2.COLOR_BGR2BGRA)
b,g,r,a=cv2.split(image2)
a[:,:]=100
image3=cv2.merge([b,g,r,a])
#cv2.imshow("ALPHA",image3)
cv2.imwrite("E:hello_world/alpha.png",image3)
cv2.waitKey()
cv2.destroyAllWindows()