C# OpenCV 강좌 : 제 47강 - 2D 필터링
2D 필터링(2D Filter)
Filter2D
함수를 이용하여 임의의 선형 필터
를 이미지나 영상에 적용합니다.
커널
을 직접 생성하여 필터
를 적용할 수 있습니다.
가우시안 필터
, 중간값 필터
를 비롯하여 임의의 필터
또한 직접 생성하여 적용할 수 있습니다.
원본(Source, src)
은 영상이나 이미지를 사용합니다.
-
영상 사용하기
: [3강 바로가기][3강] -
이미지 사용하기
: [4강 바로가기][4강]
메인 코드
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OpenCvSharp;
namespace Project
{
class OpenCV : IDisposable
{
IplImage filter;
public IplImage Filter2D(IplImage src)
{
filter = new IplImage(src.Size, BitDepth.U8, 3);
float[] data = { 1, 4, 7, 4, 1,
4, 16, 26, 16, 4,
7, 26, 41, 26, 7,
4, 16, 26, 16, 4,
1, 4, 7, 4, 1 };
CvMat kernel = new CvMat(5, 5, MatrixType.F32C1, data);
Cv.Normalize(kernel, kernel, 1.0, 0, NormType.L1);
Cv.Filter2D(src, filter, kernel);
return filter;
}
public void Dispose()
{
if (filter != null) Cv.ReleaseImage(filter);
}
}
}
세부 코드
filter = new IplImage(src.Size, BitDepth.U8, 3);
결과에 사용할 filter
를 생성합니다.
float[] data = { 1, 4, 7, 4, 1,
4, 16, 26, 16, 4,
7, 26, 41, 26, 7,
4, 16, 26, 16, 4,
1, 4, 7, 4, 1 };
1차원 배열을 생성하여 임의의 커널을 생성합니다.
- Tip : 해당 커널은
가우시안 블러
커널과 동일합니다.
CvMat kernel = new CvMat(5, 5, MatrixType.F32C1, data);
CvMat
을 이용하여 매트릭스를 생성합니다. new CvMat(n, m, 매트릭스 타입, 배열)
입니다.
nxm
크기의 매트릭스로 변환하여 생성합니다.
Cv.Normalize(kernel, kernel, 1.0, 0, NormType.L1);
Cv.Normalize()
함수를 이용하여 매트릭스를 정규화합니다.
Cv.Normalize(원본, 결과, 최댓값, 최솟값, 정규화기준)
입니다.
최댓값
: 정규화된 값의 최댓값입니다.최솟값
: 정규화된 값의 최솟값입니다.정규화기준
: 정규화할때의 기준을 선택합니다.NormType.C
: 매트릭스의 최댓값을 기준으로 정규화합니다.NormType.L1
: 매트릭스의 합을 기준으로 정규화합니다.NormType.L2
: 매트릭스의 유클리드 노름을 기준으로 정규화합니다.
Cv.Filter2D(src, filter, kernel);
Cv.Filter2D()
을 적용합니다. Cv.Filter2D(원본, 결과, 커널)
을 사용합니다.
출력 결과
Filter2D
SmoothType.Gaussian 5x5
공유하기


댓글 남기기