무리스

반응형

OpenCv로 Contour 윤곽선 찾기!

 

안녕하세요. 무리스입니다.

 

오늘은 C# OpenCv의 Contour 기능을 활용하여

이미지의 윤곽선을 검출하는 코드에 대해서 배워보도록 하겠습니다.

 

제가 연습삼아 만들어본 프로그램 구성은 

【이미지 파일 불러오기】 → 【이미지 확인】 → 【Contour 검출】의

순서로 코드를 짜보았습니다.

 

 

1. Open 버튼으로 이미지를 불러왔습니다.

 

2. 불러온 이미지를 확인합니다.

 

3. Contour 버튼을 통해 이미지 윤곽선을 검출합니다.

 

OpenCv Contour 함수를 이용하면 윤곽선을 쉽게 검출할 수 있습니다.

 

 

윤곽선 검출 코드를 알아보자!

 

먼저, OpenCv 라이브러리가 설치되지 않았다면

아래 작성한 OpenCv 설치 방법을 통해 준비합니다.

 

[C#] OpenCV 설치 방법, 3분이면 끝 !

 

[C#] OpenCV 설치 방법, 3분이면 끝 !

C# OpenCV 설치 방법 안녕하세요. 무리스입니다. 오늘은 OpenCv 설치 방법에 대해 정보 공유를 해보도록 하겠습니다. 먼저, 【OpenCV란】 Open Source Computer Vision의 약자로 다양한 이미지 처리를 할 수 있

mooris.tistory.com

 

1. using OpenCvSharp; 을 선언합니다.

using OpenCvSharp;

 

2. open_btn_Click으로 이미지를 불러옵니다.

private void open_btn_Click(object sender, EventArgs e)
{
	String file_path = null;
    
    // OpenFileDialog 초기 경로
    openFileDialog1.InitialDirectory = @"C:\User\Desk";		
    
    // 확장자명 필터
    openFileDialog1.Filter = "Image file (*.jpg, *.jpeg, *.jpe, *.jfif, *.png) 
    | *.jpg; *.jpeg; *.jpe; *.jfif; *.png";
    
    if (openFileDialog1.ShowDialog() == DialogResult.OK)
    {
    	// FileName으로 설정하면 파일 경로+파일명으로 표시됨
    	file_path = openFileDialog1.FileName; 
        
        // TextBox에 파일 경로 지정
        filepath_Text.Text = file_path;  
    }
}

 

3. Contour_btn_Click으로 이미지 Contour 검출

        private void Contour_btn_Click(object sender, EventArgs e)
        {
            
            Mat img = new Mat(filepath_Text.Text);
            Mat img_contour = new Mat();
            img.CopyTo(img_contour);
            

            Mat bin = new Mat();
            Cv2.CvtColor(img, bin, ColorConversionCodes.BGR2GRAY);
            Cv2.Threshold(bin, bin, 127, 255, ThresholdTypes.Binary);
            
            
            Mat hierarchy1 = new Mat();
            Cv2.FindContours(bin, out Mat[] contour1, hierarchy1, RetrievalModes.Tree, 
            ContourApproximationModes.ApproxSimple);
            
            
            for (int i = 0; i < contour1.Length; i++)
            {
                Cv2.DrawContours(img_contour, contour1, i, Scalar.Red, 1, LineTypes.AntiAlias); 
            }


            Cv2.ImShow("Image_Contour", img_contour);
            Cv2.WaitKey(0);
            Cv2.DestroyAllWindows();
        }

Cv2.FindContours()는 이미지의 모든 Contour를 검색합니다.

Cv.2DrawContours()를 통해 Contours를 그립니다.

Cv2.ImShow()를 통해 Contour을 검출한 이미지를 새 창으로 띄웁니다.

 

 

위 코드 외에도 Contour  점 좌표 추출, 조건 검출 등 Contour을 활용한 많은 기능들이 있으니

Contour를 좀 더 깊게 공부하신다면 유용하게 쓸 수 있습니다.

 

추가적인 Contour 기능은 다음 포스팅에 작성하도록 하겠습니다.

 

끝까지 읽어주셔서 감사합니다.

 

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading