C# OpenCV 강좌 : 제 14강 - 가장자리 검출

C# OpenCV Edge

C# OpenCV 강좌 : 제 14강 - 가장자리 검출
[ C#-OpenCvSharp2 ] - 윤대희

가장자리 검출 (Edge)


1 영상이나 이미지를 가장자리를 검출 하기 위해 사용합니다.


원본(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 canny;
        IplImage sobel;
        IplImage laplace;        
            
        public IplImage CannyEdge(IplImage src)
        {
            canny = new IplImage(src.Size, BitDepth.U8, 1);
            Cv.Canny(src, canny, 0, 100);
            return canny;
        }

        public IplImage SobelEdge(IplImage src)
        {
            sobel = new IplImage(src.Size, BitDepth.U8, 3);
            Cv.Copy(src, sobel);
            Cv.Sobel(sobel, sobel, 1 , 0, ApertureSize.Size3);
            return sobel;
        }

        public IplImage LaplaceEdge(IplImage src)
        {
            laplace = new IplImage(src.Size, BitDepth.U8, 3);
            Cv.Laplace(src, laplace);
            return laplace;
        }
        
        public void Dispose()
        {
            if (canny != null) Cv.ReleaseImage(canny);
            if (sobel != null) Cv.ReleaseImage(sobel);
            if (laplace != null) Cv.ReleaseImage(laplace);                
        }
    }
}


Class Code


Canny Edge

public IplImage CannyEdge(IplImage src)
{
    canny = new IplImage(src.Size, BitDepth.U8, 1);
    Cv.Canny(src, canny, 0, 100);
    return canny;
}

Canny Edge의 경우 단색이기 때문에 채널은 1입니다. Cv.Canny()를 이용해서 가장자리를 검출 할 수 있습니다. Cv.Canny(원본, 결과, 임계값1, 임계값2)를 설정합니다. 그라디언트는 Edge에 수직한다는 것을 이용하여 Edge가 아니면 제거합니다.

  • 임계값1 : 임계값1 이하에 포함된 가장자리는 가장자리에서 제외합니다.
  • 임계값2 : 임계값2 이상에 포함된 가장자리는 가장자리로 간주합니다.



Sobel Edge

public IplImage SobelEdge(IplImage src)
{
    sobel = new IplImage(src.Size, BitDepth.U8, 3);
    Cv.Sobel(src, sobel, 1 , 0, ApertureSize.Size3);
    return sobel;
}

Sobel Edgex방향 미분값y방향 미분값을 이용하여 가장자리를 검출합니다. Cv.Sobel()를 이용해서 가장자리를 검출 할 수 있습니다. Cv.Sobel(원본, 결과, x방향 미분, y방향 미분, 커널의 크기)를 설정합니다.



Laplace Edge

public IplImage LaplaceEdge(IplImage src)
{
    laplace = new IplImage(src.Size, BitDepth.U8, 3);
    Cv.Laplace(src, laplace);
    return laplace;
}

Laplace EdgeCv.Laplace()를 이용해서 가장자리를 검출 할 수 있습니다. Cv.Laplace(원본, 결과)를 설정합니다.



Main Code


using (OpenCV Convert = new OpenCV())
{
    pictureBoxIpl2.ImageIpl = Convert.CannyEdge(src);
}

//

using (OpenCV Convert = new OpenCV())
{
    pictureBoxIpl2.ImageIpl = Convert.SobelEdge(src);
}

//

using (OpenCV Convert = new OpenCV())
{
    pictureBoxIpl2.ImageIpl = Convert.LaplaceEdge(src);
}

*Edge가장자리 검출이 적용된 이미지를 표시합니다.



Result


CannyEdg - 0, 255

2


CannyEdge - 100, 255

3


CannyEdge - 0, 100

4


SobelEdge - 0, 1

5


SobelEdge - 1, 0

6


LaplaceEdge

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 강좌 : 제 13강 - 흐림 효과 ⤧  Next post C# OpenCV 강좌 : 제 15강 - HSV
    C#-OpenCvSharp2 Category