Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
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
Archives
Today
Total
관리 메뉴

:)

이벤트 처리하기 본문

컴퓨터비전

이벤트 처리하기

mihee 2022. 3. 19. 12:33

키보드 이벤트 처리하기

키보드 입력 대기

int waitKey(int delay = 0);
  • delay : 밀리초 단위 대기 시간. delay <= 0 이면 무한히 기다림.
  • 반환 값: 눌린 키 값. 키가 눌리지 않으면 -1.

마우스 이벤트 처리하기

마우스 이벤트 처리를 위한 콜백 함수 등록

void setMouseCallback(const String& winname, MouseCallback onMouse, void* userdata = 0);
  • winname : 창이름
  • onMouse : 마우스 콜백 함수 이름.
  • userdata : 콜백 함수에 전달할 사용자 지정 데이터 (optional)
#include <iostream>
#include "opencv2/opencv.hpp"

using namespace std;
using namespace cv;
void on_mouse(int event, int x, int y, int flags, void*);
Mat src;
Point ptOld;
int main()
{
    src = imread("lenna.bmp");

    if (src.empty()) {
        cerr << "Image laod failed!" << endl;
        return -1;
    }

    namedWindow("src");
    setMouseCallback("src", on_mouse);

    imshow("src", src);
    waitKey();
}

void on_mouse(int event, int x, int y, int flags, void*) {
    switch (event) {
    case EVENT_LBUTTONDOWN: //왼쪽마우스
        ptOld = Point(x, y);
        cout << "EVENT_LBUTTONDOWM: " << x << ", " << y << endl;
        break;
    case EVENT_LBUTTONUP: //왼쪽마우스
        cout << "EVENT_LBUTTONUP: " << x << ", " << y << endl;
        break;
    case EVENT_MOUSEMOVE: //마우스 움직임
        if (flags & EVENT_FLAG_LBUTTON) {
            cout << "EVENT_MOUSEMOVE: " << x << ", " << y << endl;
            //circle(src, Point(x, y), 2, Scalar(0, 255, 255), -1, LINE_AA);
            line(src, ptOld, Point(x, y), Scalar(0, 255, 255), 3, LINE_AA);
            ptOld = Point(x, y);
            imshow("src", src);
        }
        break;

    default:
        break;
    }
}

트랙바 사용하기

  • 트랙바(trackbar)
    • 영상 출력 창에 부착되어 프로그램 동작 중에 사용자가 지정된 범위 안의 값을 선택할 수 있는 GUI
    • 슬라인더 컨트롤(slider control)

트랙바 생성 함수

int createTrackbar(const String& trackbarname, const String& winname, int* value, int count, TrackbarCallback onChange=0, void* userdata = 0);
  • winname : 트백바를 생성할 창 이름
  • value : 트랙바 위치 값을 받을 정수형 변수의 주소
  • count : 트백바 최대 위치 (최소 위치는 항상 0)
  • onChange : 트백바 위치가 변경될 때마다 호출되게 만들 콜백 함수 이름(함수의 포인터). NULL로 지정하면 콜백 함수는 호출X
  • userdata : 트랙바 콜백 함수에 전달할 사용자 데이터의 포인터(optinal)
  • 반환값 : 정상동작 1, 실패 0
#include <iostream>
#include "opencv2/opencv.hpp"

using namespace std;
using namespace cv;

void on_level_change(int pos, void* userdata);

int main(void)
{
    Mat img = Mat::zeros(400, 400, CV_8UC1);

    namedWindow("image");
    createTrackbar("level", "image", 0, 16, on_level_change, (void*)&img);

    imshow("image", img);
    waitKey();
}

void on_level_change(int pos, void* userdata)
{
    Mat img = *(Mat*)userdata;

    img.setTo(pos * 16);
    imshow("image", img);
}

'컴퓨터비전' 카테고리의 다른 글

영상처리_필터링  (0) 2022.03.21
OpenCV 함수  (0) 2022.03.20
OpenCV 그리기 함수  (0) 2022.03.18
카메라와 동영상 처리  (0) 2022.03.17
OpenCV 주요 클래스  (0) 2022.03.16
Comments