• 7행 main() 함수와 on_mouse() 함수에서 함께 사용할 영상 img를 전역 변수로 선언합니다.
• 8행 on_mouse() 함수에서 이전 마우스 이벤트 발생 위치를 저장하기 위한 용도로 ptOld 변수를 전역 변수 형태로 선언합니다.
• 20~21행 setMouseCallback() 함수를 사용하기 전에 마우스 이벤트를 받을 창이 미리 생성되어 있어야 합니다.
• 33행 마우스 왼쪽 버튼이 눌린 좌표를 전역 변수 ptOld에 저장합니다. ptOld는 마우스가 움직인 궤적을 그릴 때 사용됩니다.
• 34행 마우스 왼쪽 버튼이 눌린 좌표를 콘솔 창에 출력합니다.
• 37행 마우스 왼쪽 버튼이 떼어진 좌표를 콘솔 창에 출력합니다.
• 39~44행 마우스가 움직이는 경우, 마우스 왼쪽 버튼이 눌려 있는 상태라면 img 영상 위에 노란색 직선을 이어 그립니다. 직선은 ptOld 좌표부터 현재 마우스 이벤트 발생 좌표까지 그리며, 직선을 그리고 난 후에는 현재 마우스 이벤트 발생 좌표를 ptOld에 저장합니다.
코드 4-11에서는 main() 함수와 마우스 콜백 함수 on_mouse() 함수에서 함께 사용할 레나 영상을 전역 변수 img로 선언하여 사용합니다. setMouseCallback() 함수의 세 번째 인자를 이용하여 영상 데이터를 마우스 콜백 함수로 전달할 수도 있지만, 여기서는 간단하게 전역 변수를 사용하는 형태로 코드를 구성하였습니다.2
2 콜백 함수에서 userdata 인자를 설정하여 Mat 영상을 전달하는 방식은 4.3.3절 트랙바 예제 코드를 참고하기 바랍니다.