在计算机中,一张彩色图像可视为一个矩阵。矩阵中的每一个元素就是一个像素点。放大图片后我们会发现每个像素点的颜色都不一样,但其实所有的色彩都可以由三原色“蓝(blue)”“绿(green)”“红(red)”混合表示出。这也是一般的彩色图像被称为BGR图的原因。

上图给出了三原色1:1混合后变为的颜色,当然,可以通过改变三原色的比例来创造出更多的颜色。

一般在计算机里,每一种原色有256种深浅的程度(0为最暗,255为最亮)。此外,我们还给图片中的每一种原色起名叫一个通道,那么彩色图像就有三个通道,而灰度图像就只有一个通道。

所谓通道分离,就是将BGR图中的三原色剥离出来,每一种原色都用一张灰度图来表示,越亮的地方表示该种原色比例越高,反之同理。比如说这张体育馆的图片:

我们将它的红色分离出来就是:

 可以看到,在跑道和座椅的地方比较亮,就说明这些位置红色占比时比较大的。

除了BGR颜色模型,常见的还有HSV颜色模型。HSV模型通过色度(Hue)、饱和度(Saturation)和亮度(Value)对颜色进行描述。下为一例:

下面我们来看看代码,通道分离我们需要split函数,合并时我们需要merge函数。这两种函数均有两种原型,并且是对应使用的。第一种用数组接收分离后的图片,第二种用模板类vector接收。

#include<iostream>
#include<opencv2/opencv.hpp>using namespace std;
using namespace cv;int main()
{Mat img = imread("F:\\image\\12.jpg");Mat img_arr0, img_arr1, img_arr2;//用于存放数组类型的结果Mat result0;//多通道合并的结果//用数组接收namedWindow("B通道", 0);namedWindow("G通道", 0);namedWindow("R通道", 0);namedWindow("result0", 0);//使窗口大小可调Mat imgs[3];split(img, imgs);//第一个参数是需要分离的图,第二参数是用来接受的数组的名称img_arr0 = imgs[0];img_arr1 = imgs[1];img_arr2 = imgs[2];imshow("B通道", img_arr0);imshow("G通道", img_arr1);imshow("R通道", img_arr2);//展示各通道的图像Mat zero = Mat::zeros(img.rows, img.cols, CV_8UC1);//创建一张与该图大小一样的图片(像素点全为0)imgs[0] = zero;//将蓝色通道全部变为0merge(imgs, 3, result0);//第一个参数是数组名,第二个参数是数组元素个数,第三个参数是输出图像名imshow("result0", result0);//最后输出的是只有GR通道有色彩的图像waitKey(0);return 0;
}

结果如下:

接下来演示第二种方法:

#include<iostream>
#include<opencv2/opencv.hpp>using namespace std;
using namespace cv;int main()
{Mat img = imread("F:\\image\\12.jpg");Mat HSV;cvtColor(img, HSV, COLOR_BGR2HSV);Mat img_v0, img_v1, img_v2;//用于存放vector类型的结果Mat result1;//多通道合并的结果//用vector接收namedWindow("H通道", 0);namedWindow("S通道", 0);namedWindow("V通道", 0);namedWindow("result1", 0);vector<Mat>imgv;//创建一个名为imgv的模板类vector;split(HSV, imgv);img_v0 = imgv.at(0);img_v1 = imgv.at(1);img_v2 = imgv.at(2);//在vecter中检索的顺序也是从0开始imshow("H通道", img_v0);imshow("S通道", img_v1);imshow("V通道", img_v2);Mat zero = Mat::zeros(img.rows, img.cols, CV_8UC1);imgv.at(2) = zero;//将亮度调为0merge(imgv, result1);imshow("result1", result1);waitKey(0);return 0;
}

结果如下:

如果有帮到你,就麻烦点个赞吧!

图像的通道分离与合并相关推荐

  1. OpenCV Python教程(2、图像元素的访问、通道分离与合并)

    OpenCV Python教程之图像元素的访问.通道分离与合并 转载请详细注明原作者及出处,谢谢! 访问像素 像素的访问和访问numpy中ndarray的方法完全一样,灰度图为: [python] v ...

  2. OpenCV之Python学习笔记(1)(2): 图像的载入、显示和保存 图像元素的访问、通道分离与合并

    OpenCV之Python学习笔记 一直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看到一本国外的新书< ...

  3. opencv进阶学习笔记2:numpy操作图像,色彩空间,查找指定颜色范围,通道分离与合并

    基础部分传送门 python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录: python+opencv进阶版学习笔记目录(适合有一定基础) Numpy操作图像 1.遍历图像每一 ...

  4. OpenCV与图像处理学习一——图像基础知识、读入、显示、保存图像、灰度转化、通道分离与合并

    OpenCV与图像处理学习一--图像基础知识.读入.显示.保存图像.灰度转化.通道分离与合并 一.图像基础知识 1.1 数字图像的概念 1.2 数字图像的应用 1.3 OpenCV介绍 二.图像属性 ...

  5. 图像通道分离与合并操作

    图像通道分离与合并操作 文章目录 图像通道分离与合并操作 一.图片的通道分离与合并 二.编程要求 一.图片的通道分离与合并 对于一幅的数字图像,我们看到的是一幅真正的图片,但是对于计算机,这副图像只是 ...

  6. OpenCV数字图像处理(5) 像素访问之添加椒盐实例 通道分离与合并

    [转载请注明出处:http://blog.csdn.net/leytton/article/details/35991945] 配套使用的OpenCV版本:2.4.9 ; Python版本:2.7 主 ...

  7. 图片的色彩空间转换、简单色彩跟踪与通道分离、合并(三)

    一 图片的色彩空间转换 灰度色彩空间 单通道,取值范围[0,255] 0黑255白 RGB色彩空间(opencv中习惯用BGR) opencv中R,G,B三通道取值范围均为[0,255]. HSV/H ...

  8. OpenCV--颜色通道分离和合并

    OpenCV–颜色通道分离和合并 颜色通道分离: 语法: mv = cv.split( img[, mv] ) img:输入的多通道的图像数组: mv:数组的输出向量:如果需要,数组本身被重新分配(B ...

  9. 【OpenCV3】图像通道分离与合并——cv::split()与cv::merge()详解

    在图像处理中,尤其是处理多通道图像时,有时需要对各个通道进行分离,分别处理:有时还需要对分离处理后的各个通道进行合并,重新合并成一个多通道的图像.opencv2和opencv3中实现图像通道的合并与分 ...

最新文章

  1. redhat7企业版linuxlinux基本操作
  2. mysql隔离级别与悲观锁、乐观锁
  3. Android自己主动化測试之Monkeyrunner用法及实例
  4. 排查一个触摸屏驱动问题
  5. python读取配置文件并添加字典中_Python如何使用ConfigParser读取配置文件
  6. 5.10地址信息函数
  7. spring-mvc.xml与spring-mybatis.xml配置文件中命名空间问题
  8. 简书粉丝列表老bug
  9. Bailian2757 最长上升子序列【DP】
  10. java获取响应网页源代码
  11. maven的基本用法
  12. [导入]Manning.Ajax.in.Action.Oct.2005.pdf(9.26 MB)
  13. CC2530休眠-PM2-PM3
  14. 灵界的科学丨五、心灵与意识的科学奥祕
  15. oracle创建用户密码和权限--ORA-65096 invalid common user or role name
  16. Monkeys [POI 2003,Bzoj 2610]
  17. hdmi网线延长器稳定吗_Chromecast HDMI延长器的重点是什么? 我需要吗?
  18. 送书 | 聊聊逆向爬取数据
  19. 【深度学习篇】---CNN和RNN结合与对比,实例讲解
  20. python turtle 长方形_Python turtle 画五星红旗

热门文章

  1. 口袋版服务器信息错误,口袋版稳定性测试服务器加开待君来
  2. 如何从程序员走向技术管理岗位?
  3. 一台路由器最多能连接多少个设备上网
  4. 华为路由器密码恢复方法(含各版本BootROM操作方法)
  5. 石家庄计算机主要学什么,石家庄都有哪些电脑学校
  6. imx6ull交叉编译libmodbus
  7. TCP/IP协议简介(三) 之 网络层
  8. Hitchhiker V0.10 在 CentOS上的搭建
  9. 网站的背景音乐在服务器上不播放,急急急...博客背景音乐添加后不能播放?老是跳出无法与服务器连接? 爱问知识人...
  10. 画笔盒的智慧(享元模式)