前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >opencv: 颜色通道 探究(图示+源码)

opencv: 颜色通道 探究(图示+源码)

作者头像
JNingWei
发布2018-09-28 15:57:35
1.4K0
发布2018-09-28 15:57:35
举报
文章被收录于专栏:JNing的专栏JNing的专栏

起因:

  大家都知道的,在OpenCV中,图像都是按 BGR颜色通道顺序 来进行处理的。在自学OpenCV的过程中,我对 拆分和合并颜色通道 起了兴趣。自己写了一些代码来验证自己的思路。

实验思路:

  1. 分别将三个通道的矩阵数值取出;
  2. 保留单色通道,其他通道全部置0,以显示 单色 图片的效果;
  3. 保留双色通道,剩余一个通道置0,以显示 混合双色 图片的效果;
  4. 保留全部三个颜色通道,重新编排颜色通道顺序,以显示不同 颜色通道顺序 对应图片的效果。

Demo:

原始图像

(girl.jpg):
这里写图片描述
这里写图片描述

单色图片

保留 blue 通道,其他通道全部置0(b_pic.jpg):
这里写图片描述
这里写图片描述
保留 green 通道,其他通道全部置0(g_pic.jpg):
这里写图片描述
这里写图片描述
保留 red 通道,其他通道全部置0(r_pic.jpg):
这里写图片描述
这里写图片描述

双色混合图片

green、red通道混合,其他通道全部置0(gr_pic.jpg):
这里写图片描述
这里写图片描述
blue、red通道混合,其他通道全部置0(br_pic.jpg):
这里写图片描述
这里写图片描述
blue、green通道混合,其他通道全部置0(bg_pic.jpg):
这里写图片描述
这里写图片描述

三通道全混合

存为 RGB 通道顺序的 图片(rgb_pic.jpg):
这里写图片描述
这里写图片描述
存为 BGR 通道顺序的 图片(bgr_pic.jpg):
这里写图片描述
这里写图片描述

附上自己写的实验代码:

代码语言:javascript
复制
    # -*- coding: utf-8 -*-

    import cv2
    import numpy as np

    pic = cv2.imread('../pic/girl.jpg')

    b, g, r = cv2.split(pic)


    ### 单色图片
    # 保留 blue 通道,其他通道全部置0
    b_pic = np.zeros((424, 600, 3), np.uint8)
    b_pic[:, :, 0] = b
    cv2.imshow('b_pic', b_pic)
    cv2.imwrite('../pic/b_pic.jpg', b_pic)
    cv2.waitKey(2000)
    cv2.destroyAllWindows()

    # 保留 green 通道,其他通道全部置0
    g_pic = np.zeros((424, 600, 3), np.uint8)
    g_pic[:, :, 1] = g
    cv2.imshow('g_pic', g_pic)
    cv2.imwrite('../pic/g_pic.jpg', g_pic)
    cv2.waitKey(2000)
    cv2.destroyAllWindows()

    # 保留 red 通道,其他通道全部置0
    r_pic = np.zeros((424, 600, 3), np.uint8)
    r_pic[:, :, 2] = r
    cv2.imshow('r_pic', r_pic)
    cv2.imwrite('../pic/r_pic.jpg', r_pic)
    cv2.waitKey(2000)
    cv2.destroyAllWindows()


    ### 双色混合图片
    # green、red通道混合,其他通道全部置0
    gr_pic = cv2.imread('../pic/girl.jpg')
    gr_pic[:, :, 0] = 0
    cv2.imshow('gr_pic', gr_pic)
    cv2.imwrite('../pic/gr_pic.jpg', gr_pic)
    cv2.waitKey(2000)
    cv2.destroyAllWindows()

    # blue、red通道混合,其他通道全部置0
    br_pic = cv2.imread('../pic/girl.jpg')
    br_pic[:, :, 1] = 0
    cv2.imshow('br_pic', br_pic)
    cv2.imwrite('../pic/br_pic.jpg', br_pic)
    cv2.waitKey(2000)
    cv2.destroyAllWindows()

    # blue、green通道混合,其他通道全部置0
    bg_pic = cv2.imread('../pic/girl.jpg')
    bg_pic[:, :, 2] = 0
    cv2.imshow('bg_pic', bg_pic)
    cv2.imwrite('../pic/bg_pic.jpg', bg_pic)
    cv2.waitKey(2000)
    cv2.destroyAllWindows()


    ### 三通道全混合
    # 存为 RGB 通道顺序的 图片
    rgb_pic = np.zeros((424, 600, 3), np.uint8)
    rgb_pic[:, :, 0] = r
    rgb_pic[:, :, 1] = g
    rgb_pic[:, :, 2] = b
    cv2.imshow('rgb_pic', rgb_pic)
    cv2.imwrite('../pic/rgb_pic.jpg', rgb_pic)
    cv2.waitKey(2000)
    cv2.destroyAllWindows()

    # 存为 BGR 通道顺序的 图片
    bgr_pic = np.zeros((424, 600, 3), np.uint8)
    bgr_pic[:, :, 0] = b
    bgr_pic[:, :, 1] = g
    bgr_pic[:, :, 2] = r
    cv2.imshow('bgr_pic', bgr_pic)
    cv2.imwrite('../pic/bgr_pic.jpg', bgr_pic)
    cv2.waitKey(2000)
    cv2.destroyAllWindows()


本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年07月25日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 起因:
  • 实验思路:
  • Demo:
    • 原始图像
      • (girl.jpg):
    • 单色图片
      • 保留 blue 通道,其他通道全部置0(b_pic.jpg):
      • 保留 green 通道,其他通道全部置0(g_pic.jpg):
      • 保留 red 通道,其他通道全部置0(r_pic.jpg):
    • 双色混合图片
      • green、red通道混合,其他通道全部置0(gr_pic.jpg):
      • blue、red通道混合,其他通道全部置0(br_pic.jpg):
      • blue、green通道混合,其他通道全部置0(bg_pic.jpg):
    • 三通道全混合
      • 存为 RGB 通道顺序的 图片(rgb_pic.jpg):
      • 存为 BGR 通道顺序的 图片(bgr_pic.jpg):
  • 附上自己写的实验代码:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档