C#/C# OpenCV/

C# OpenCV 5-2. 채널 분리 & 병합

2019. 11. 19.

대표함수

Cv2.Split 이미지의 각채널을 분리

Cv2.Merge 분리되어있는 채널을 하나로 병합

 

Example Code

using System;
using System.Windows.Forms;
using OpenCvSharp;

namespace SMtest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Mat src = Cv2.ImRead("image.jpg");
            Mat dst = new Mat();
            Mat[] mv = new Mat[3];

            Cv2.Split(src, out mv);
            //mv = Cv2.Split(src); 이렇게도 가능
            Cv2.ImShow("src", src);
            Cv2.ImShow("src-B", mv[0]);
            Cv2.ImShow("src-G", mv[1]);
            Cv2.ImShow("src-R", mv[2]);

            mv[2] = Mat.Zeros(mv[2].Size(), MatType.CV_8UC1);

            Cv2.Merge(mv, dst);
            Cv2.ImShow("dst", dst);

            Cv2.WaitKey(0);
            Cv2.DestroyAllWindows();
        }
    }
}

 

Explain Code


Cv2.Split(src, out mv);

Cv2.Split(src, out Mat[] mv)

      src 입력

      Mat[] mv 분리될 채널만큼의 1차원 배열 Mat

            ex) 3채널 이미지의 경우 Mat[] mv = new Mat[3]

      out 1차원 배열 Mat 앞에 꼭! 붙여줘야함

 


mv[2] = Mat.Zeros(mv[2].Size(), MatType.CV_8UC1);

      R채널 이미지를 제로이미지로 변경

 

Cv2.Merge(mv, dst);

Cv2.Merge(Mat[] mv, dst)

      Mat[] mv 병합 할 채널들의 배열

      dst 출력

 

결과