더북(TheBook)

7행 트랙바 콜백 함수를 선언합니다. 이 트랙바 콜백 함수의 정의는 22~28행에 있습니다.

11행 픽셀 값이 0으로 초기화된 400×400 크기의 영상 img를 생성합니다.

13행 트랙바를 부착할 image 창을 미리 생성합니다.

14행 트랙바를 생성하고 트랙바 콜백 함수를 등록합니다. 트랙바 이름은 level이고, 최대 위치는 16으로 지정하였습니다. 트랙바 콜백 함수 이름은 on_level_change이고 img 객체의 주소를 사용자 데이터로 지정하였습니다.

16~17행 img 영상을 image 창에 출력하고, 키 입력이 있을 때까지 창을 닫지 않고 유지합니다.

24행 void* 타입의 인자 userdataMat* 타입으로 형변환한 후 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 영상과 같은 영상 데이터를 사용합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.