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
결과