실제 영상에 대해 엠보싱 필터링을 수행하는 소스 코드를 코드 7-1에 나타냈습니다. 코드 7-1의 filter_embossing() 함수는 rose.bmp 장미 영상에 엠보싱 필터링을 수행하고 그 결과를 화면에 출력합니다. filter_embossing() 함수가 정의된 소스 파일과 사용된 영상 파일은 내려받은 예제 파일 중 ch07/filter 프로젝트에서 확인할 수 있습니다.
코드 7-1 엠보싱 필터링 예제 [ch07/filter]
01 void filter_embossing() 02 { 03 Mat src = imread("rose.bmp", IMREAD_GRAYSCALE); 04 05 if (src.empty()) { 06 cerr << "Image load failed!" << endl; 07 return; 08 } 09 10 float data[] = { -1, -1, 0, -1, 0, 1, 0, 1, 1 }; 11 Mat emboss(3, 3, CV_32FC1, data); 12 13 Mat dst; 14 filter2D(src, dst, -1, emboss, Point(-1, -1), 128); 15 16 imshow("src", src); 17 imshow("dst", dst); 18 19 waitKey(0); 20 destroyAllWindows(); 21 }
• 3행 rose.bmp 영상을 그레이스케일 형식으로 불러옵니다.
• 10~11행 data 배열을 이용하여 3×3 크기의 엠보싱 필터 마스크 행렬 emboss를 생성합니다.
• 14행 filter2D() 함수를 이용하여 엠보싱 필터링을 수행합니다. 이때 filter2D() 함수 여섯 번째 인자에 128을 지정하여 필터링 결과 영상에 128을 더합니다.