学习图像处理知识---EmguCV3.4图像通道分离和合并操作
在实际图像检测中,需要进行图像分离和合并操作。
分离:
1.CvInvoke 类中采用
public static void Split(IInputArray src,IOutputArray mv)// src 为多通道的彩色图片,MV为分离单通道图片数组类如vectorofmat
2.Mat类中
public Mat[] Split() //数组中的每个元素都代表原始图像的单个颜色通道
3.Image类中
public Image<Gray, TDepth>[] Split() //得到是灰图通道的图片
4.Matrix类中
public Matrix<TDepth>[] Split()
合成:注意图像显示只能为单通道、三通道、四通道。其它数量的通道合成,系统会报错。通道合成也可以为三通道图像加单通道合成为四通道。
1.CvInvoke 类中采用
public static void Merge(IInputArrayOfArrays mv,IOutputArray dst)//和合成函数相反
2.Image类中采用构造函数进行合成
public Image(Image<Gray, TDepth>[] channels)//几个灰度图像进行合成
混合通道CvInvoke 类中采用
public static void MixChannels(IInputArrayOfArrays src,IInputOutputArray dst,int[] fromTo)
//src输入图片 ,dst为输入图片同时也为输出图片,fromTo数组为偶数长度数组,
例如{0,0,1,1,2,2}相当把src第一通道给dst的第通道,依次。
实例如下:
a2 = new Image<Bgr, byte>((Bitmap)pictureBox4.Image);
VectorOfMat f2 = new VectorOfMat();
f2.Push(a2.Split()[0].Mat);
f2.Push(a2.Split()[1].Mat);
f2.Push(a2.Split()[1].Mat);
CvInvoke.Merge(f2, a3);
imageBox1.Image = a3;
手增加色彩变色
Mat a5 = new Mat(a2.Size,Emgu.CV.CvEnum.DepthType.Cv8U,1);
Matrix<byte> m1 = new Matrix<byte>(a2.Size);
for (int i=0;i<400;i++)
for (int j = 0; j < 600; j++)
{
m1[i,j]= (byte)numericUpDown2.Value;
}
a5 = m1.Mat;
f2.Push(a2.Split()[0].Mat);
f2.Push(a2.Split()[1].Mat);
f2.Push(a5);
// f2.Push(a2.Split()[2].Mat);
//imageBox1.Image = new Image<Bgr, byte>(f2);
// MergeMertens mn = new MergeMertens();
// Image<Bgr, byte> a3 = new Image<Bgr, byte>(a2.Size);
Mat a3 = new Mat();
CvInvoke.Merge(f2, a3);
//mn.Process(f2, a3);
imageBox1.Image = a3;
pictureBox5.Image = a3.Bitmap;