다양한 임계값을 이용하여 이진화를 수행하고 그 결과를 바로 확인할 수 있는 예제 프로그램 소스 코드를 코드 11-1에 나타냈습니다. 코드 11-1은 영상 출력 창에 0~255 사이의 정수를 선택할 수 있는 트랙바를 생성하고, 트랙바 위치를 이진화 임계값으로 사용하여 이진화를 수행합니다. 코드 11-1에 나타난 소스 코드 파일과 사용된 영상 파일은 내려받은 예제 파일 중 ch11/threshold 프로젝트에서 확인할 수 있습니다.
코드 11-1 트랙바를 이용한 이진화 예제 프로그램 [ch11/threshold]
01 #include "opencv2/opencv.hpp" 02 #include <iostream> 03 04 using namespace cv; 05 using namespace std; 06 07 void on_threshold(int pos, void* userdata); 08 09 int main(int argc, char* argv[]) 10 { 11 Mat src; 12 13 if (argc < 2) 14 src = imread("neutrophils.png", IMREAD_GRAYSCALE); 15 else 16 src = imread(argv[1], IMREAD_GRAYSCALE); 17 18 if (src.empty()) { 19 cerr << "Image load failed!" << endl; 20 return -1; 21 } 22 23 imshow("src", src); 24 25 namedWindow("dst"); 26 createTrackbar("Threshold", "dst", 0, 255, on_threshold, (void*)&src); 27 setTrackbarPos("Threshold", "dst", 128); 28 29 waitKey(0); 30 return 0; 31 } 32 33 void on_threshold(int pos, void* userdata) 34 { 35 Mat src = *(Mat*)userdata; 36 37 Mat dst; 38 threshold(src, dst, pos, 255, THRESH_BINARY); 39 40 imshow("dst", dst); 41 }