• 7행 트랙바 콜백 함수를 선언합니다. 이 트랙바 콜백 함수의 정의는 22~28행에 있습니다.
• 11행 픽셀 값이 0으로 초기화된 400×400 크기의 영상 img를 생성합니다.
• 13행 트랙바를 부착할 image 창을 미리 생성합니다.
• 14행 트랙바를 생성하고 트랙바 콜백 함수를 등록합니다. 트랙바 이름은 level이고, 최대 위치는 16으로 지정하였습니다. 트랙바 콜백 함수 이름은 on_level_change이고 img 객체의 주소를 사용자 데이터로 지정하였습니다.
• 16~17행 img 영상을 image 창에 출력하고, 키 입력이 있을 때까지 창을 닫지 않고 유지합니다.
• 24행 void* 타입의 인자 userdata를 Mat* 타입으로 형변환한 후 img 변수로 참조합니다.
• 26행 트랙바 위치 pos에 16을 곱한 결과를 img 영상의 전체 픽셀 값으로 설정합니다. 만약 pos * 16 결과가 255보다 크면 포화 연산이 적용됩니다.
• 27행 픽셀 값이 설정된 img 영상을 image 창에 출력합니다. 앞서 17행에서 waitKey() 함수가 사용되었기 때문에 여기서는 waitKey() 함수를 따로 호출하지 않아도 됩니다.
코드 4-12에서 트랙바 콜백 함수로 사용자 데이터를 전달하는 방법에 대해 살펴보겠습니다. createTrackbar() 함수에서 사용자 데이터는 void* 타입으로 설정해야 하며, 코드 4-12에서는 createTrackbar() 함수 여섯 번째 인자를 (void*)&img 형태로 지정하였습니다. on_level_change() 함수에서는 전달된 userdata를 먼저 Mat* 타입으로 형변환한 후, 이를 Mat 타입 지역 변수 img에 복사하였습니다. 결국 on_level_change() 함수에서 사용하는 img 변수는 main() 함수의 img 영상과 같은 영상 데이터를 사용합니다.