http://lib.csdn.net/article/opencv/33264

http://blog.csdn.net/laohu_tiger/article/details/17359777

http://blog.csdn.net/qq_29540745/article/details/52487832

  • 图像通道

1.一个图像的通道数是N,就表明每个像素点处有N个数,一个a×b的N通道图像,本质上是三维数组,N表示第三个维度的个数,其图像矩阵实际上是N行a*b的数字矩阵。

OpenCV中图像的通道可以是1、2、3和4。其中常见的是1通道和3通道,2通道和4通道不常见。

1通道的是灰度图。

3通道的是彩色图像,比如RGB图像。

4通道的图像是RGBA,是RGB加上一个A通道,也叫alpha通道,表示透明度。PNG图像(便携式网络图形(Portable Network Graphics))是一种典型的4通道图像。alpha通道可以赋值0到1,或者0到255,表示透明到不透明,但是一般直接imshow()是看不出什么效果来的

2通道的图像是RGB555和RGB565。2通道图在程序处理中会用到,如傅里叶变换,可能会用到,一个通道为实数,一个通道为虚数,主要是编程方便。RGB555是16位的,2个字节,5+6+5,第一字节的前5位是R,后三位+第二字节是G,第二字节后5位是B,可见对原图像进行压缩了。

2.OpenCV中用imshow( )来显示图像,只要Mat的数据矩阵符合图像的要求,就可以用imshow来显示,超过了4通道,就不是图像了,imshow( )也显示不了。

3.imshow( )显示单通道图像时一定是灰度图,如果我们想显示红色的R分量,还是应该按三通道图像显示,只不过G和B通道要赋值成0或255.

4.通道分解用split( ),通道合成用merg( ),这俩函数都是mixchannel( )的特例

注意:其实任何一张彩图都是4通道图像,只是读不读的问题。

  •  Scalar

在C++和opencv编程的时候,自建一个图片矩阵的时候,会用到Scalar函数和CV_8UC1等数据类型,用法如下:

Scalar表示为图像的通道赋值,CV_8UC1表示8位无符号数1通道,CV_8UC3表示8位无符号数3通道,CV_8UC4表示8位无符号数4通道。通道数也就是声明数组‘大小’,是1维还是3维,CV_8UC2不常用

Scalar(x),一般用于灰度图像,数据格式为:CV_8UC1或者是CV_8U,但是如果将数据格式变成CV_8UC3,则一个参数的情况下默认为B分量,后面的GR默认为0

Scalar(x,y),数据格式为CV_8UC1时,忽略后面的y,数据格式变成CV_8UC3,默认为BG分量,后面的R默认为0

Scalar(x,y,z),一般用于彩色图像的显示

Scalar(x,y,z,m),一般用于带透明通道的图像显示

结论:CV_8UCn和Scalar中的参数个数m的关系,如果n>m,那么后面的通道值默认为0,如果n<m,那么只取calar中的参数中的前n个。

Mat Img_tmp(600, 500, CV_8UC4, Scalar(255,255,255,0));

表示自建一个大小为600*500的四通道白色不透明的图片

  • split( )

C++: void split(const Mat& mtx, Mat* mv)
C++: void split(const Mat& mtx, vector<Mat>& mv)

参数:mtx   输入矩阵

mv    输出矩阵或矩阵数组

  • merge( )

C++: void merge(const Mat* mv, size_t count, OutputArray dst)
C++: void merge(const vector<Mat>& mv, OutputArray dst)

参数:mv    输入矩阵

count   当mv是C形式的array时,count表示输入矩阵个数

dst   输出矩阵

图像通道、Scalar、分离、合成通道的更多相关文章

  1. opencv 3 core组件进阶(2 ROI区域图像叠加&图像混合;分离颜色通道、多通道图像混合;图像对比度,亮度值调整)

    ROI区域图像叠加&图像混合 #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp&g ...

  2. opencv3.2.0 分离颜色通道&多通道图像混合

    ##名称:分离颜色通道&多通道图像混合 ##平台:QT5.7.1+OpenCV3.2.0 ##时间:2017年12月11日 /***************创建QT控制台程序********* ...

  3. python实现图像加载与保存,窗口创建与销毁,图片常用属性,ROI,通道的分离与合并,对比度和亮度

    目录: (一)图像加载与保存 (二)图像显示窗口创建与销毁 (三)图片的常用属性的获取 (四)生成指定大小的矩形区域(ROI) (五)图片颜色通道的分离与合并 (六)两张图片相加,改变对比度和亮度 ( ...

  4. Opencv中RGB通道/HSV通道并分离

    OpenCV中HSV颜色模型及颜色分量范围 opencv HSV 颜色模型(H通道取值 && CV_BGR2HSV_FULL) [opencv]在hsv颜色空间识别区域颜色 将原图分离 ...

  5. 学习 opencv---(4) 分离颜色通道 && 多通道混合

    上篇文章中我们讲到了使用addWeighted函数进行图像混合操作,以及将ROI和addWeighted函数结合起来使用,对指定区域进行图像混合操作. 而为了更好地观察一些图像材料的特征,有时需要对R ...

  6. OpenCV3编程入门笔记(2)计时函数、感兴趣区域RIO、分离/混合通道

    11     绘制直线的line函数 DrawLine(Mat img, Pont start, Point end); 绘制椭圆的ellipse函数 DrawEllipse(Mat img, dou ...

  7. OpenCV 学习笔记(8)彩色图像RGB通道的分离、合并与显示

    https://blog.csdn.net/ZYTTAE/article/details/42234989 由于算法的需要,需要把彩色图像的R.G.B值分离出来,OpenCV中正好有split() 和 ...

  8. 通道的分离与合并,ROI,

    通道的分离与合并 class Program { static void Main(String[] args) { Mat img = CvInvoke.Imread(@"C:\Users ...

  9. Halcon学习之三:有关图像通道的函数(R是三通道,B是1通道,G二通道),排列顺序BGR

    黑白摄像机会返回每个像素所对应的能量采用结果,这些结果组成了一幅单通道灰度值图像,而对于RGB彩色摄像机,它将返回每个像素所对应的三个采样结果,也就是一幅三通道图像.下面这些是与图像通道有关的函数: ...

随机推荐

  1. springcloud系列15 bus的使用

    可以结合wekbbok进行通知: 将更新的代码进行点击就好:

  2. selenium基础(参数化脚本)

    参数化脚本 什么是参数化 参数化就是用包含多组数据的参数列表,使之替换脚本中的响应常量值,这样,在脚本运行的时候,就会使用参数表中的数据来代替脚本中的常量值 由于参数表中包含了多组数据,所以执行用例时 ...

  3. java_缓冲流(字符输出输入流)

    /** java.io.BufferedReader extends Reader * * 构造方法: * BufferedReader(Reader in):创建一个使用默认大小输入缓冲区的缓冲字符 ...

  4. springboot整合jpa和mybatis实现主从复制

    百度多方参考终于配出我自己的了,以下仅供参考 参考https://www.cnblogs.com/cjsblog/p/9712457.html 代码 首先数据源配置 spring.datasource ...

  5. 记mysql 启动不了了的解决方法

    系统: centos7 本地的环境,mysql启动不了,查看 /var/log/mysqld.log 有以下内容 2018-12-24T08:05:38.090527Z 0 [Warning] TIM ...

  6. sort的cmp函数

    sort的cmp函数只能写return a>b;或者return a<b;

  7. [JZOJ4648] 【NOIP2016提高A组模拟7.17】锦标赛

    题目 描述 题目大意 有nnn个人,你要确定一个出场序列.每次新上台的人就会和擂主打一架,胜利的人继续当擂主.题目给出两两之间打架胜利(失败)的概率. 问111选手坚持到最后的最大概率. 思考历程 看 ...

  8. SpringCloud之Fegin学习笔记

    以下部分内容来源于网络摘抄~ 1.作用 Feign 是一种声明式.模板化的 HTTP 客户端.在 Spring Cloud 中使用 Feign,可以做到使用 HTTP 请求访问远程服务,就像调用本地方 ...

  9. 并发和多线程(二)--启动和中断线程(Interrupt)的正确姿势

    启动线程: 从一个最基本的面试题开始,启动线程到底是start()还是run()? Runnable runnable = () -> System.out.println(Thread.cur ...

  10. git 命令行(三)-删除文件

    在Git中,删除也是一个修改操作,我们实战一下,有一个多余的文件:src/common/Util2.js 我们需要删除这个文件, 一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用 rm命令 ...