前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenCVSharp学习笔记(六)通道分割合并

OpenCVSharp学习笔记(六)通道分割合并

作者头像
MaybeHC
发布2024-04-23 19:44:18
630
发布2024-04-23 19:44:18
举报
文章被收录于专栏:技术之路技术之路

通道分割

函数Cv2.Split

代码语言:javascript
复制
	Mat[]mats = Cv2.Split(img);

Cv2.Split 通道分割这里主要使用了这个方法,将图片的三色通道进行分割,opencv中的顺序和我们平时的顺序有区别,是BGR的顺序,不是我们平时使用的RGB顺序,也就是说mats[0]是Blue通道,mats[1]是Green通道,mats[2]是Red通道

注意这样分割出来的通道图片,并不是RGB的单色通道,而是三色通道的值都为R或G或B。这里一开始让我尝试了半天,还以为操作出现了错误

代码语言:javascript
复制
	Mat img = new Mat(@"./Resource/1.jpeg");
	Window window = new Window("img", WindowFlags.Normal);
	window.Resize(500, 640);
	//BGR
	Mat[]mats = Cv2.Split(img);
	window.ShowImage(img);
	Mat sum = new Mat();
	Window b = new Window("b", WindowFlags.Normal);
	Window g = new Window("g", WindowFlags.Normal);
	Window r = new Window("r", WindowFlags.Normal);
	b.Resize(500, 640);
	g.Resize(500, 640);
	r.Resize(500, 640);
	b.ShowImage(mats[0]);
	g.ShowImage(mats[1]);
	r.ShowImage(mats[2]);

下面是原图和分出来的三张灰度图片

在这里插入图片描述
在这里插入图片描述

通道合并

函数Cv2.Merge

这里我们做了一个通道的合并,传入的参数就是Mat数组,里面包含要合并的通道,最后一个参数是合成后的图像

代码语言:javascript
复制
  	        Cv2.Merge(new Mat[] { x, x, x}, bsum);//(b,0,0)图像

下面我们将图形分开合并成了蓝色、红色、绿色通道图

代码语言:javascript
复制
            Mat img = new Mat(@"./Resource/1.jpeg");
            Window window = new Window("img", WindowFlags.Normal);
            window.Resize(500, 640);
            //BGR
            Mat[]mats = Cv2.Split(img);
            window.ShowImage(img);
            Window b = new Window("b", WindowFlags.Normal);
            Window g = new Window("g", WindowFlags.Normal);
            Window r = new Window("r", WindowFlags.Normal);
            b.Resize(500, 640);
            g.Resize(500, 640);
            r.Resize(500, 640);
            //创建一个空通道0
            Mat zero = new Mat(mats[0].Size(), MatType.CV_8UC1, new Scalar(0));
            Mat bsum = new Mat();
            Mat gsum = new Mat();
            Mat rsum = new Mat();
            Cv2.Merge(new Mat[] { mats[0], zero, zero }, bsum);//(b,0,0)图像
            Cv2.Merge(new Mat[] { zero, mats[1], zero }, gsum);//(0,g,0)图像
            Cv2.Merge(new Mat[] { zero, zero, mats[2] }, rsum);//(0,0,r)图像
            b.ShowImage(bsum);
            g.ShowImage(gsum);
            r.ShowImage(rsum);
            Cv2.WaitKey(0);
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-04-23,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 通道分割
    • 函数Cv2.Split
    • 通道合并
      • 函数Cv2.Merge
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档