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

영상이나 이미지를 가장자리를 검출 하기 위해 사용합니다.
원본(Source, src)은 영상이나 이미지를 사용합니다.
클래스 코드
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OpenCvSharp;
namespace Project
{
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);
}
}
}세부 코드
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 Edge는 x방향 미분값과 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 Edge는 Cv.Laplace()를 이용해서 가장자리를 검출 할 수 있습니다.
Cv.Laplace(원본, 결과)를 설정합니다.
메인 코드
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는 가장자리 검출이 적용된 이미지를 표시합니다.
출력 결과
CannyEdg - 0, 255

CannyEdge - 100, 255

CannyEdge - 0, 100

SobelEdge - 0, 1

SobelEdge - 1, 0

LaplaceEdge

공유하기
Kakao
Naver
Twitter
LinkedIn
Facebook
댓글 남기기