ksize 이후의 인자는 모두 기본값을 가지고 있으므로 실제 함수 호출 시에는 생략할 수 있습니다. ksize 인자에 1을 지정하면 3×1 또는 1×3 커널을 사용하고, 기본값인 3을 지정하면 그림 9-5에서 설명한 3×3 소벨 마스크를 사용합니다.
Sobel() 함수는 x 방향과 y 방향으로의 고차 미분을 계산할 수 있지만 대부분의 경우 x 방향 또는 y 방향으로의 1차 미분을 구하는 용도로 사용됩니다. 예를 들어 그레이스케일 레나 영상을 x 방향으로 편미분한 결과를 dx 행렬에, y 방향으로 편미분한 결과를 dy 행렬에 저장하려면 다음과 같이 코드를 작성합니다.
Mat src = imread("lenna.bmp", IMREAD_GRAYSCALE); Mat dx, dy; Sobel(src, dx, CV_32FC1, 1, 0); Sobel(src, dy, CV_32FC1, 0, 1);
앞 예제 코드에서 dx와 dy 행렬 크기는 src 행렬과 같고, 행렬 원소는 float 자료형을 사용하도록 설정하였습니다.
OpenCV는 널리 사용되고 있는 소벨 마스크 외에도 샤르 필터(Scharr filter) 마스크를 이용한 미분 연산도 지원합니다. 샤르 필터는 3×3 소벨 마스크보다 정확한 미분 계산을 수행하는 것으로 알려져 있습니다. 가로 방향과 세로 방향으로 미분을 수행하는 샤르 필터 마스크를 그림 9-6에 나타냈습니다.
▲ 그림 9-6 3×3 샤르 필터 마스크