学习图像处理知识---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;

 

猜你喜欢

转载自blog.csdn.net/tuto7534/article/details/80274304