C# OpenCV 강좌 : 제 28강 - 모폴로지 - 연산

C# OpenCV MorphologyEx

C# OpenCV 강좌 : 제 28강 - 모폴로지 - 연산
[ C#-OpenCvSharp2 ] - 윤대희

모폴로지 연산(MorphologyEx)


1 영상이나 이미지의 화소값을 대체하기 위해 사용합니다. 영상이나 이미지에서 MorphologyEx를 이용해 이미지를 고급 형태학적 작업을 할 수 있습니다.

팽창(Dilate)침식(Erode)을 기본으로 하여 연산해 고급 형태학을 적용할 수 있습니다.

MorphologyEx사용하지 않고, 팽창(Dilate), 침식(Erode)으로도 구현이 가능합니다.

팽창과 침식 알아보기 : 27강 바로가기


원본(Source, src)를 영상이나 이미지를 사용하면 됩니다.

영상 사용하기 : 3강 바로가기

이미지 사용하기 : 4강 바로가기



Class


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OpenCvSharp;

namespace test
{
    class OpenCV : IDisposable
    {  
        IplImage morp;
            
        public IplImage Morphology(IplImage src)
        {
            morp = new IplImage(src.Size, BitDepth.U8, 3);
                    
            IplConvKernel element = new IplConvKernel(3, 3, 1, 1, ElementShape.Ellipse);
            Cv.MorphologyEx(src, morp, src, element, MorphologyOperation.Open, 3);
                    
            return morp;
        }        
                  
        public void Dispose()
        {
            if (morp != null) Cv.ReleaseImage(morp);
        }
    }
}



Class Code


morp = new IplImage(src.Size, BitDepth.U8, 3);

모폴로지 연산이 적용된 이미지를 선언합니다.


IplConvKernel element = new IplConvKernel(3, 3, 1, 1, ElementShape.Ellipse);

모폴로지(Morphology)의 형태학적 작업을 위해 IplConvKernel을 이용하여 지정된 크기와 구조 요소를 반환합니다.


IplConvKernel 알아보기 : 27강 바로가기


Cv.MorphologyEx(src, morp, src, element, MorphologyOperation.Open, 3);

Cv.MorphologyEx()를 이용하여 모폴로지 연산을 적용할 수 있습니다. Cv.MorphologyEx(원본, 결과, 임시, 요소, 연산 방법, 반복횟수) 입니다.


  • Tip : 임시(Temp) 이미지는 크기가 동일한 이미지를 입력합니다. (연산 중 이미지를 잠시동안 교체하기 위한 용도)


  • MorphologyOperation.*

    • MorphologyOperation.Open : 열기 연산
    • MorphologyOperation.Close : 닫기 연산
    • MorphologyOperation.Gradient : 그라디언트 연산
    • MorphologyOperation.TopHat : 탑햇 연산
    • MorphologyOperation.BlackHat : 블랙햇 연산



열기 연산

침식(Erode) 후, 팽창(Dilate) 적용합니다. Open = Dilate(Erode(src))와 동일합니다.

영역의 크기를 유지하며 밝은 영역을 감소시킵니다.


닫기 연산

팽창(Dilate) 후, 침식(Erode) 적용합니다 Close = Erode(Dilate(src))와 동일합니다.

영역의 크기를 유지하며 어두운 영역을 감소시킵니다.


그라디언트 연산

팽창(Dilate)에서 침식(Erode)을 제외합니다. Gradient = Dilate(src) - Erode(src)와 동일합니다.


탑햇 연산

원본에서 열기 연산을 제외합니다. TopHat = src - Open와 동일합니다.


블랙햇 연산

닫기 연산에서 원본을 제외합니다. BlackHat = Close - src와 동일합니다.



Result


열기 연산

2


닫기 연산

3


그라디언트 연산

4


탑햇 연산

5


블랙햇 연산

6



Book Image

개정판이 출간됐습니다!

C#과 파이썬을 활용한 OpenCV 4 프로그래밍 (개정판)

컴퓨터 비전 기초 이론부터 머신러닝을 활용한 영상 처리 프로젝트까지

  • C#과 파이썬용 OpenCV의 데이터 형식과 행렬 및 배열 연산
  • 이미지/동영상/카메라를 활용한 입출력과 결과 저장
  • 전처리 과정과 정보를 탐색하기 위한 이미지 변형
  • 유의미한 정보를 검출하기 위한 이미지 변환
  • 이미지에서 정보를 검출 및 인식
  • 객체 검출을 포함한 모션 추적
  • K-means, KNN, SVM 등의 머신러닝 알고리즘 적용 방법
  • 카페(Caffe), 다크넷(Darknet), 텐서플로 모델을 활용한 딥러닝 모듈 적용 방법
  • Tesseract-OCR과 C# OpenCvSharp4를 활용한 프로젝트
  • 텐서플로와 Python OpenCV4를 활용한 프로젝트
  • 윤대희 저 | 위키북스

    [yes24 바로가기] [알라딘 바로가기] [교보문고 바로가기]

    후원하기


    ⤧  Previous post C# OpenCV 강좌 : 제 27강 - 모폴로지 - 팽창 & 침식 ⤧  Next post C# OpenCV 강좌 : 제 29강 - 얼굴 검출
    C#-OpenCvSharp2 Category