opencv 色彩空间与通道

  前言:色彩空间 (Color Space) 即以同的空间维度来表示某一色彩 (通常使用 3 个或者 4 个 值)。

# (opencv默认彩色图像的色彩空间为BGR,//就是RGB,但B、R通道互换储存位置)
# RGB图像是一种比较常见的色彩空间类型,除此以外还有一些其他的色彩空间,
# 比较常见的包括GRAY色彩空间(灰度图像)、XYZ色彩空间、YCrCb色彩空间、HSV色彩空间、HLS色彩空间、
# CIELab色彩空间、CIELuv色彩空间、Bayer色彩空间等。每个色彩空间都有自己擅长的处理问题的领域,
# 因此,为了更方便地处理某个具体问题,就要用到色彩空间类型转换。
# 色彩空间类型转换是指,将图像从一个色彩空间转换到另外一个色彩空间。
# 例如,在使用OpenCV处理图像时,可能会在RGB色彩空间和HSV色彩空间之间进行转换。
# 在进行图像的特征提取、距离计算时,往往先将图像从RGB色彩空间处理为灰度色彩空间。在一些应用中,
# 可能需要将色彩空间的图像转换为二值图像。
# 色彩空间也称为颜色空间、彩色空间、颜色模型、彩色系统、彩色模型、色彩模型等。

1..转换图像色彩空间

# dst = cv2.cvtColor(src,code) //转换图像色彩空间
# 参数:
# dst: 转化后的图像
# src: 转换前的初始图像
# code: 色彩空间转换码

GRAY色彩空间既是灰度图像,用[0,255]的数值表示256个灰度级别,“0”表示纯黑,"1"表示纯白


# 从BGR色彩空间转换到GRAY色彩空间,转换码为:cv2.COLOR_BGR2GRAY

# 不可以从灰度图像改回彩色图像,颜色比例已丢失

image = cv2.imread("C:/Users/shelter/Desktop/WaterGod.jpg")
print("image", image)
cv2.imshow("initial_BGR", image)
cv2.waitKey()
# GRAY 灰度图像
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
print("gray_image", gray_image)
cv2.imshow("BGR->GRAY", gray_image)
cv2.waitKey()
image = cv2.cvtColor(gray_image, cv2.COLOR_GRAY2BGR)  # 不可以从灰度图像改回彩色图像,颜色比例已丢失
print("image", image)
cv2.imshow("GRAY->BGR", image)
cv2.waitKey()
cv2.destroyAllWindows()

# HSV 色彩图像 H:色调[0,180],S:饱和度[0,255],V:明暗[0,255]


# 从BGR色彩空间转换到HSV色彩空间,转换码为:cv2.COLOR_BGR2HSV
 

image = cv2.imread("C:/Users/shelter/Desktop/WaterGod.jpg")
cv2.imshow("initial_BGR", image)
cv2.waitKey()
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
print("hsv_image", hsv_image)
cv2.imshow("BGR->HSV", hsv_image)
cv2.waitKey()
image = cv2.cvtColor(hsv_image, cv2.COLOR_HSV2BGR)
print("image", image)
cv2.imshow("HSV->BGR", image)
cv2.waitKey()
cv2.destroyAllWindows()

拆分/合并通道

# cv2.split(image)可用与拆分BGR、HSV.
# b,g,r = cv2.split(bgr_image) //b,g,r分别为B、G、R的通道图像,bgr_image 为一幅BGR图像
# bgr = cv2.merge([b,g,r])  // bgr为按B->G->R的顺序合并通道后的图像,b,g,r分别为B、G、R的通道图像

# HSV同上(h,s,v=cv2.split(image); hsv=cv2.merge([h,s,v])

# 拆分/合并通道 BGR


 

image = cv2.imread("C:/Users/shelter/Desktop/WaterGod.jpg")
cv2.imshow("initial_BGR", image)
cv2.waitKey()
b, g, r = cv2.split(image)
print("b", b)
print("g", g)
print("r", r)
cv2.imshow("blue", b)
cv2.imshow("green", g)
cv2.imshow("red", r)  # 全灰色,三通道全修改为相同的值B/G/R
cv2.waitKey()
cv2.destroyAllWindows()
bgr = cv2.merge([b, g, r])
cv2.imshow("bgr", bgr)
brg = cv2.merge([b, r, g])
cv2.imshow("brg", brg)
rgb = cv2.merge([r, g, b])
cv2.imshow("rgb", rgb)
rbg = cv2.merge([r, b, g])
cv2.imshow("rbg", rbg)
grb = cv2.merge([g, r, b])
cv2.imshow("grb", grb)
gbr = cv2.merge([g, b, r])
cv2.imshow("gbr", gbr)
cv2.waitKey()
cv2.destroyAllWindows()

# 拆分/合并通道 HSV

image = cv2.imread("C:/Users/shelter/Desktop/WaterGod.jpg")
cv2.imshow("initial_BGR", image)
cv2.waitKey()
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
cv2.imshow("HSV", hsv_image)
cv2.waitKey()
h, s, v = cv2.split(hsv_image)
cv2.imshow("H", h)
cv2.waitKey()
cv2.imshow("S", s)
cv2.waitKey()
cv2.imshow("V", v)
cv2.waitKey()
cv2.destroyAllWindows()
hsv = cv2.merge([h, s, v])
cv2.imshow("hsv", hsv)
hvs = cv2.merge([h, v, s])
cv2.imshow("hvs", hvs)
svh = cv2.merge([s, v, h])
cv2.imshow("svh", svh)
shv = cv2.merge([s, h, v])
cv2.imshow("shv", shv)
vsh = cv2.merge([v, s, h])
cv2.imshow("vsh", vsh)
vhs = cv2.merge([v, h, s])
cv2.imshow("vhs", vhs)
cv2.waitKey()
cv2.destroyAllWindows()
image = cv2.cvtColor(vhs, cv2.COLOR_HSV2BGR)
cv2.imshow("vhs->BGR", image)
cv2.waitKey()
h[:, :] = 180
h180sv = cv2.merge([h, s, v])
cv2.imshow("h180sv", h180sv)
cv2.waitKey()
s[:, :] = 250
hs250v = cv2.merge([h, s, v])
cv2.imshow("hs250v", hs250v)
cv2.waitKey()
cv2.destroyAllWindows()

# BGRA色彩空间(BGR+A)

# alpha通道(设置图像透明度的A通道,[0,255],0:透明,255:不透明)


image = cv2.imread("C:/Users/shelter/Desktop/WaterGod.jpg")
cv2.imshow("initial_BGR", image)
bgra_image = cv2.cvtColor(image, cv2.COLOR_BGR2BGRA)
cv2.imshow("BGR->BGRA", bgra_image)
b, g, r, a = cv2.split(bgra_image)
a[:, :] = 172
bgra172 = cv2.merge([b, g, r, a])
cv2.imshow("bgra172", bgra172)
cv2.imwrite("C:/Users/shelter/Desktop/WaterGodabgra172.png", bgra172)
a[:, :] = 0
bgra0 = cv2.merge([b, g, r, a])
cv2.imshow("bgra0", bgra0)
cv2.imwrite("C:/Users/shelter/Desktop/WaterGodabgra0.png", bgra0)
cv2.waitKey()
cv2.destroyAllWindows()

 # 在imshow展示中图像没有透明度的变化效果

# imwrite保存为.png图像后在对文件夹中,查看效果。(png是一种典型的4通道图像)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值