Mat[]mats = Cv2.Split(img);
Cv2.Split 通道分割这里主要使用了这个方法,将图片的三色通道进行分割,opencv中的顺序和我们平时的顺序有区别,是BGR的顺序,不是我们平时使用的RGB顺序,也就是说mats[0]是Blue通道,mats[1]是Green通道,mats[2]是Red通道
注意这样分割出来的通道图片,并不是RGB的单色通道,而是三色通道的值都为R或G或B。这里一开始让我尝试了半天,还以为操作出现了错误
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]);
下面是原图和分出来的三张灰度图片
这里我们做了一个通道的合并,传入的参数就是Mat数组,里面包含要合并的通道,最后一个参数是合成后的图像
Cv2.Merge(new Mat[] { x, x, x}, bsum);//(b,0,0)图像
下面我们将图形分开合并成了蓝色、红色、绿色通道图
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);