C#/C# OpenCV/

C# OpenCV 6-3. 모폴로지 연산 - 침식, 팽창

2019. 12. 3.

대표함수

Cv2.GetStructuringElement 구조체 정의

Cv2.Erode 침식함수, 바이너리 이미지에서 흰색 오브젝트 외각을 검은색으로 변경

      이진화 이미지에서 작은 흰색노이즈를 제거하거나, 합쳐진 오브젝트를 분리하는데 사용가능

Cv2.Dilate 팽창함수, 바이너리 이미지에서 흰색 오브젝트 주변에 흰색을 추가

      이진화 이미지에서 침식으로 줄어든 오브젝트를 원복하거나, 인접한 오브젝트를 하나로 만드는데 사용가능

 

Example Code


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

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

        private void Form1_Load(object sender, EventArgs e)
        {
            Mat src = new Mat("image.jpg");
            Mat dst = new Mat();
            Cv2.CvtColor(src, src, ColorConversionCodes.BGR2GRAY);
            Cv2.Threshold(src, src, 0, 255, ThresholdTypes.Otsu);
            Cv2.ImShow("src", src);

            Mat element1 = Cv2.GetStructuringElement(MorphShapes.Rect, new Size(7, 7));
            Mat element2 = Cv2.GetStructuringElement(MorphShapes.Cross, new Size(7, 7));
            Mat element3 = Cv2.GetStructuringElement(MorphShapes.Ellipse, new Size(7, 7));

            Cv2.Dilate(src, dst, element1,iterations:1);
            Cv2.ImShow("dilate-rect", dst);
            Cv2.Dilate(src, dst, element2);
            Cv2.ImShow("dilate-cross", dst);
            Cv2.Dilate(src, dst, element3);
            Cv2.ImShow("dilate-ellipse", dst);

            Cv2.Erode(src, dst, element1, iterations:1);
            Cv2.ImShow("erode-rect", dst);
            Cv2.Erode(src, dst, element2);
            Cv2.ImShow("erode-cross", dst);
            Cv2.Erode(src, dst, element3);
            Cv2.ImShow("erode-ellipse", dst);

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

 

Explain Code


            Mat element1 = Cv2.GetStructuringElement(MorphShapes.Rect, new Size(7, 7));
            Mat element2 = Cv2.GetStructuringElement(MorphShapes.Cross, new Size(7, 7));
            Mat element3 = Cv2.GetStructuringElement(MorphShapes.Ellipse, new Size(7, 7));
            

Cv2.GetStructuringElement(MorphShapes shape, Size ksize)

      shape 변환구조체

      ksize 구조체크기

※ MorphShapes

      Rect 생성한 ksize 크기에 접하는 사각형

      Cross 생성한 ksize 크기에 접하는 십자형

      Ellipse 생성한 ksize 크기에 접하는 원형

 


            Cv2.Dilate(src, dst, element1,iterations:1);
            Cv2.Dilate(src, dst, element2);
            Cv2.Dilate(src, dst, element3);
            

Cv2.Dilate(src, dst, element, int iteration)

      src 입력

      dst 출력

      element 구조체

      iteration 반복시행 횟수, 안적을시 default 1

 

            Cv2.Erode(src, dst, element1, iterations:1);
            Cv2.Erode(src, dst, element2);
            Cv2.Erode(src, dst, element3);
            

Cv2.Erode(src, dst, element, int iteration)

      src 입력

      dst 출력

      element 구조체

      iteration 반복시행 횟수, 안적을시 default 1

 

결과