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

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