C#/C# OpenCV/

C# OpenCV 6-4. 모폴로지 연산 - 닫기, 열기

2019. 12. 4.

대표함수

Cv2.MorphologyEx 모폴로지 연산 함수

Cv2.Erdoe 지난 강의 참고, [프로그래밍/C# OpenCV] - C# OpenCV 6-3. 모폴로지 연산 - 침식, 팽창

Cv2.Dilate 지난 강의 참고, [프로그래밍/C# OpenCV] - C# OpenCV 6-3. 모폴로지 연산 - 침식, 팽창

 

Example Code


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

namespace morph2
{
    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();
            Cv2.CvtColor(src, src, ColorConversionCodes.BGR2GRAY);
            Cv2.Threshold(src, src, 0, 255, ThresholdTypes.Otsu);
            Cv2.ImShow("src", src);

            Mat element = Cv2.GetStructuringElement(MorphShapes.Ellipse, new Size(7, 7));

            Cv2.MorphologyEx(src, dst, MorphTypes.Close, element, iterations: 1);
            Cv2.ImShow("close", dst);
            Cv2.Dilate(src, dst, element);
            Cv2.Erode(dst, dst, element, iterations: 1);
            Cv2.ImShow("dilate-erode", dst);

            Cv2.MorphologyEx(src, dst, MorphTypes.Open, element, iterations: 1);
            Cv2.ImShow("open", dst);
            Cv2.Erode(src, dst, element);
            Cv2.Dilate(dst, dst, element, iterations: 1);
            Cv2.ImShow("erode-dilate", dst);

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

 

Explain Code


            Cv2.MorphologyEx(src, dst, MorphTypes.Close, element, iterations: 1);
            Cv2.Dilate(src, dst, element);
            Cv2.Erode(dst, dst, element, iterations: 1);
            

Cv2.MorphologyEx(src, dst, MorphTypes op, element, int iteration)

      src 입력

      dst 출력

      MorphType op 시행할 연산 *Close=닫기연산

      element 구조체

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

 

※ 닫기연산 은 팽창연산 - 침식연산을 순서대로 해준것과 같음.

  흰색 오브젝트 내의 검은점을 삭제하는데 사용

 

            Cv2.MorphologyEx(src, dst, MorphTypes.Open, element, iterations: 1);
            Cv2.Erode(src, dst, element);
            Cv2.Dilate(dst, dst, element, iterations: 1);
            

Cv2.MorphologyEx(src, dst, MorphTypes op, element, int iteration)

src 입력

dst 출력

MorphType op 시행할 연산 *Open=열기연산

element 구조체

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

 

※ 열기연산 은 침식연산 - 팽창연산을 순서대로 해준것과 같음.

  작은 흰색 노이즈를 제거하는데 사용

 

결과

닫기 연산팽창-침식 연산이 결과가 같고

   열기 연산침식-팽창 연산이 결과가 같은것을 볼 수있다