:)
이벤트 처리하기 본문
키보드 이벤트 처리하기
키보드 입력 대기
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