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
공유하기


댓글 남기기