【个人笔记】OpenCV4 C++ 快速入门 11课
个人资料,仅供学习使用
修改时间——2022年2月13日 10:24:45
学习课程:OpenCV4 C++ 快速入门视频30讲
视频老师:贾志刚
11 通道分离与合并
opencv知识点:
- 通道分离 - split
- 通道合并 - merge
- 通道混合 - mixChannels
本课所解决的问题:
- 如何分离RGB三通道?
- 如何合并RGB三通道?
- 如何对通道进行混合?
1.RGB三通道的解释
彩色图像,是由RGB三个通道合并起来得到的。
如果R,G,B分离,它们就分别对应一个单通道图像(因为都是单通道,所以为灰度图像)
当然,这三个单通道图像再经过合并,就会恢复成原本的彩色图像了
下图中间的R,G,B图,并不是分离,而是3通道中其他两个通道置0了
这时,如果再通过BGR2GRAY转换色彩空间,就可以得到对应的单通道图像
2.通道分离
分离通道要用到split
根据文档,我们有两种分离方式
第一种方式
//函数定义
void channels_demo(Mat& image);//函数实现—
void QuickDemo::channels_demo(Mat& image) {Mat mvt[3];/*第一种方式通过创建图像数组,存储每个单通道图像*/split(image, mvt);imshow("蓝色单通道", mvt[0]);imshow("绿色单通道", mvt[1]);imshow("蓝色单通道", mvt[2]);
}
第二种方式
void QuickDemo::channels_demo(Mat& image) {std::vector<Mat> mvt;/*第二种方式通过创建动态数组,存储每个单通道图像*/split(image, mvt);imshow("蓝色单通道", mvt[0]);imshow("绿色单通道", mvt[1]);imshow("红色单通道", mvt[2]);
}
分离后得到的结果
3.通道合并
合并通道要用到merge
根据文档,我们有两种合并方式
第一种方式
void QuickDemo::channels_demo(Mat& image) {Mat mvt[3];split(image, mvt);imshow("蓝色单通道", mvt[0]);imshow("绿色单通道", mvt[1]);imshow("红色单通道", mvt[2]);Mat dst;merge(mvt,3,dst);/*这里的3指,共有3个单通道图像*/imshow("分离再合并",dst);}
第二种方式
void QuickDemo::channels_demo(Mat& image) {std::vector<Mat> mvt;split(image, mvt);imshow("蓝色单通道", mvt[0]);imshow("绿色单通道", mvt[1]);imshow("红色单通道", mvt[2]);Mat dst;merge(mvt, dst);imshow("分离再合并",dst);}
合并后得到的结果
4.通道混合
通道混合要用到mixChannels
mixChannels混合通道共6个参数第1个参数 输入第2个参数 输入的矩阵数第3个参数 输出第4个参数 输出的矩阵数第5个参数 从哪个通道 变成 哪个通道第6个参数 要变的对数
这里我们进行一个演示,实现如下通道的混合
- 0通道→2通道
- 1通道不变
- 2通道→1通道
这个混合的意思是
- 0通道的单通道图像,变成了2通道的单通道图像
- 1通道不变
- 2通道的单通道图像,变成了0通道的单通道图像
彩色图像本来是bgr的顺序,经过通道混合就变成了rgb
void QuickDemo::channels_demo(Mat& image) {Mat dst = Mat::zeros(image.size(), image.type());int from_to[] = { 0,2,1,1,2,0 };mixChannels(&image, 1, &dst, 1, from_to, 3);imshow("通道混合",dst);
}
混合通道后的结果
本课所用API查阅
split
char d[] = {1,2,3,4,5,6,7,8,9,10,11,12};Mat m(2, 2, CV_8UC3, d);Mat channels[3];split(m, channels);/*channels[0] =[ 1, 4;7, 10]channels[1] =[ 2, 5;8, 11]channels[2] =[ 3, 6;9, 12]*/
merge
Mat m1 = (Mat_<uchar>(2,2) << 1,4,7,10);Mat m2 = (Mat_<uchar>(2,2) << 2,5,8,11);Mat m3 = (Mat_<uchar>(2,2) << 3,6,9,12);Mat channels[3] = {m1, m2, m3};Mat m;merge(channels, 3, m);/*m =[ 1, 2, 3, 4, 5, 6;7, 8, 9, 10, 11, 12]m.channels() = 3*/
mixChannels
Mat bgra( 100, 100, CV_8UC4, Scalar(255,0,0,255) );
Mat bgr( bgra.rows, bgra.cols, CV_8UC3 );
Mat alpha( bgra.rows, bgra.cols, CV_8UC1 );
// forming an array of matrices is a quite efficient operation,
// because the matrix data is not copied, only the headers
Mat out[] = { bgr, alpha };
// bgra[0] -> bgr[2], bgra[1] -> bgr[1],
// bgra[2] -> bgr[0], bgra[3] -> alpha[0]
int from_to[] = { 0,2, 1,1, 2,0, 3,3 };
mixChannels( &bgra, 1, out, 2, from_to, 4 );
【个人笔记】OpenCV4 C++ 快速入门 11课相关推荐
- 【个人笔记】OpenCV4 C++ 快速入门 12课
个人资料,仅供学习使用 修改时间--2022年2月11日 03:01:50 学习课程:OpenCV4 C++ 快速入门视频30讲 视频老师:贾志刚 12 图像色彩空间转换 - 进阶 opencv知识点 ...
- 【个人笔记】OpenCV4 C++ 快速入门 05课
个人资料,仅供学习使用 修改时间--2022年2月10日 08:33:18 学习课程:OpenCV4 C++ 快速入门视频30讲 视频老师:贾志刚 05 图像像素的算术操作 opencv知识点: 图像 ...
- 【个人笔记】OpenCV4 C++ 快速入门 04课
个人资料,仅供学习使用 修改时间--2022年2月7日 11:00:47 学习课程:OpenCV4 C++ 快速入门视频30讲 视频老师:贾志刚 04 图像像素的读写操作 opencv知识点: 获取/ ...
- 【个人笔记】OpenCV4 C++ 快速入门 02课
个人资料,仅供学习使用 修改时间--2022年2月6日 11:40:46 学习课程:OpenCV4 C++ 快速入门视频30讲 视频老师:贾志刚 02 图像色彩空间转换 opencv知识点: 色彩空间 ...
- 【个人笔记】OpenCV4 C++ 快速入门 00课
个人资料,仅供学习使用 修改时间--2022年2月5日 11:52:56 学习课程:OpenCV4 C++ 快速入门视频30讲 视频老师:贾志刚 00 环境配置与搭建 + 显示1张图片 本课解决的问题 ...
- 【个人笔记】OpenCV4 C++ 快速入门 29课
个人资料,仅供学习使用 修改时间--2022年2月19日 15:02:27 学习课程:OpenCV4 C++ 快速入门视频30讲 视频老师:贾志刚 29 高斯双边模糊 opencv知识点: 高斯双边模 ...
- 【个人笔记】OpenCV4 C++ 快速入门 26课
个人资料,仅供学习使用 修改时间--2022年2月13日 20:49:07 学习课程:OpenCV4 C++ 快速入门视频30讲 视频老师:贾志刚 26 直方图均衡化 opencv知识点: 均衡灰度图 ...
- 【个人笔记】OpenCV4 C++ 快速入门 25课
个人资料,仅供学习使用 修改时间--2022年2月13日 20:45:23 学习课程:OpenCV4 C++ 快速入门视频30讲 视频老师:贾志刚 25 二维直方图 opencv知识点: 计算直方图数 ...
- 【个人笔记】OpenCV4 C++ 快速入门 23课
个人资料,仅供学习使用 修改时间--2022年1月26日 00:49:43 学习课程:OpenCV4 C++ 快速入门视频30讲 视频老师:贾志刚 23 视频处理与保存 opencv知识点: Vide ...
最新文章
- Flash/Flex学习笔记(4):如何打开网页及Get/Post数据
- Oracle 重做日志简介
- Flex值得一看参考资源
- 关于项目进度慢的思考----如何提高整体开发效率
- YC元老、硅谷天使投资第一人解读YC成功的秘密
- numpy 拼接_数据分析-numpy的拼接与交换
- outlook反应慢的原因_保险管怎么区分慢熔和快熔?
- Java面试题:高并发环境下,jdk7 HashMap可能出现的致命问题。注意:是在jdk7与及以下版本
- 用 Python 爬取了《雪中悍刀行》数据,终于知道它为什么这么火了
- 品味ZooKeeper之Watcher机制_2
- python调用dos命令_基于Python执行dos命令并获取输出的结果
- 错误解决办法:‘NULL’ was not declared in this scope
- 聊聊我是如何编程入门的
- Visual Studio各组件说明
- C++11线程安全的单例模式
- 腾讯云人脸识别 活体检测 人员库管理
- bluefish中文乱码问题
- java sencha_基于SenchaCmd搭建ExtJS 6.2版本开发环境(图文教程)
- 服务器排性能行榜,服务器CPU性能排行榜天梯图(双路/三路/四路)
- JS前端数据多条件筛选