윈도우 창 관리
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 |