Home OpenCV 마우스 이벤트
Post
Cancel

OpenCV 마우스 이벤트

해당 포스팅은 OpenCV 4로 배우는 컴퓨터 비전과 머신러닝 (황선규 저)를 보고 공부하며 개인적인 용도를 위해 정리한 글이다.

마우스 이벤트

  • 마우스 콜백함수를 정의한 뒤 cv::setMouseCallback() 함수에 전달한다.
  • 마우스 이벤트에는 왼쪽, 오른족, 가운데 버튼 등을 지정할 수 있고 업, 다운, 클릭, 드래그 등이 있다.
  • cv::setMouseCallback(window name, call-back function);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include "opencv2/opencv.hpp"
#include <iostream>

cv::Mat img;  // 전역 변수로 이미지 선언
cv::Point pt;  // 전역 변수로 좌표를 담을 변수 선언

void onMouse(int event, int x, int y, int flags, void*);  // 마우스 이벤트 콜백 함수 선언

int main(void)
{
    img = cv::imread("./path/to/image");

    cv::namedWindow("debug");  // 창을 출력할 윈도우 이름 지정
    cv::setMouseCallback("debug", onMouse);  // 마우스 좌표를 입력 받을 윈도우, 입력 받은 좌표와 플래그로 어떤 일을 할지에 대한 이벤트 처리 함수 전달

    cv::imshow("debug", img);
    cv::waitKey();

    cv::destroyAllWindows();

    return 0;
}

void onMouse(int event, int x, int y, int flags, void*)  // 함수 정의
{
    switch(event)
    {
        case cv::EVENT_LUBTTONDOWN:  // 왼버튼 누르기
            pt = cv::Point(x, y);  // 함수로부터 전달 받은 좌표값 지정
            break;

        case cv::EVENT_LBUTTONUP:  // 왼버튼 떼기
            break;

        case cv::EVENT_MOUSEMOVE:  // 마우스 드래그 (움직이기)
            if(flags &cv::EVENT_FLAG_LBUTTON)  // 마우스의 왼쪽 버튼의 이벤트가 발생한 경우
            {
                cv::line(img, pt, cv::Point(x, y), cv::Scalar(0, 255, 0), 2);  // 직전에 저장 되어있던 좌표와 현재 좌표를 연결하는 직선을 그림
                cv::imshow("debug", img);

                pt = cv::Point(x, y);  // 움직이며 발생하는 좌표들로 계속 초기화
            }

            break;

        default:
            break;
    }
}
This post is licensed under CC BY 4.0 by the author.

OpenCV 비디오 다루기

OpenCV 파일 입출력