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

   

가장자리 검출 (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



CannyEdge - 0, 255

2

CannyEdge - 100, 255

3

CannyEdge - 0, 100

4

SobelEdge - 0, 1

5

SobelEdge - 1, 0

6

LaplaceEdge##

6



도움이 되셨다면 광고 클릭 부탁드립니다.

⤧  Next post C# OpenCV 강좌 : 제 15강 - HSV ⤧  Previous post C# OpenCV 강좌 : 제 13강 - 흐림 효과