윈도우 창 관리
Mat img = imread("./opencv_logo.png", IMREAD_UNCHANGED); CV_Assert(img.data); //! window_name이라는 이름으로 윈도우 생성. //! 윈도우의 크기는 후에 지정된 행렬의 크기에 따라 변경됨. namedWindow("window_name", WINDOW_AUTOSIZE); waitKey(); //! window_name2에 img 표시. //! 해당 namedWindow가 없다면 직접 생성함. imshow("window_name2", img); waitKey(); //! 해당 윈도우 창을 (x, y)좌표로 이동. moveWindow("window_name2", 50, 50); waitKey(); //! 해당 윈도우 창의 크기를 재조정. resizeWindow("window_name2", 50, 50); waitKey(); //! window_name이라는 이름의 윈도우를 제거. destroyWindow("window_name2"); waitKey(); //! 모든 윈도우를 제거. destroyAllWindows();
키보드 이벤트 처리
int waitKey(ms)는 눌린 키 값을 반환한다.
단, OpenCV 윈도우가 최상위어야만 waitKey가 감지할 수 있다.
ms이 0보다 같거나 작으면, 무한 대기.
양수라면, 지정된 시간만큼 대기하고 키 이벤트가 없으면 -1반환.
마우스 이벤트 처리
setMouseCallback(window_name, callback, data)를 사용한다.
/** * 마우스 이벤트 콜백 함수 * * @param event 발생한 마우스 이벤트. * @param x 눌린 위치 x좌표 * @param y 눌린 위치 y좌표 * @param flags 특수키 여부 * @param data 기타 데이터. (옵션) */ void onMouse(int event, int x, int y, int flags, void *data){ switch (event){ case EVENT_LBUTTONDOWN: if(flags & EVENT_FLAG_CTRLKEY){ cout << "CTRL + "; } if(flags & EVENT_FLAG_ALTKEY){ cout << "ALT + "; } cout << "LEFT_DOWN" << '\n'; break; case EVENT_LBUTTONUP: cout << "LEFT_UP" << '\n'; break; default: break; } } //! test라는 window에 onMouse 콜백을 셋팅한다. setMouseCallback("test", onMouse, nullptr);
트랙바 삽입 및 제어
example)
#include <opencv2/opencv.hpp> using namespace std; using namespace cv; string title = "title"; Mat image = Mat(Size(200, 200), CV_8UC3); int r = 128; int g = 128; int b = 128; int on = 1; //! 전역변수 rgb를 사용하여 배경색을 바꾼다. void apply_rgb(){ Scalar_<int> scalar = on ? Scalar_<int>(b, g, r) : Scalar_<int>(0, 0, 0); image = scalar; imshow(title, image); } /** * 트랙바가 움직였을 때, 호출되는 콜백함수. * * @param value 변경된 값의 수치. * @param data 유저가 넘긴 데이터. */ void onChange(int value, void *data){ string name((const char*)data); cout << name << " changed to " << value << '\n'; apply_rgb(); } int main() { imshow(title, image); apply_rgb(); //! 트랙바를 붙인다. createTrackbar("R", title, &r, 255, onChange, (void*)"R_"); createTrackbar("G", title, &g, 255, onChange, (void*)"G_"); createTrackbar("B", title, &b, 255, onChange, (void*)"B_"); createTrackbar("ON/OFF", title, &on, 1, onChange, (void*)"ON_"); //! 트랙바에 관련된 다양한 함수. int NEW_MAX = 200; int NEW_MIN = 150; int NEW_POS = 100; setTrackbarMax("R", title, NEW_MAX); setTrackbarMin("G", title, NEW_MIN); setTrackbarPos("B", title, NEW_POS); int pos = getTrackbarPos("ON/OFF", title); //! 키 입력을 기다린다. cout << waitKey() << '\n'; }
'# 미사용 > OpenCV' 카테고리의 다른 글
[OpenCV] 행렬의 대칭, 전치, 반복 (0) | 2019.10.30 |
---|---|
[OpenCV] 기본도형 그리기 (0) | 2019.10.29 |
[OpenCV] 이미지 입출력 (0) | 2019.10.29 |
[OpenCV] 벡터를 행렬로 변환 (0) | 2019.10.29 |
[OpenCV] 행렬의 영역참조 (관심영역) (0) | 2019.10.29 |