728x90
키보드 이벤트 처리
waitkey() 함수 : 프로그램에서 키 입력을 확인하기 위해 사용하는 함수
int main(void)
{
Mat img = imread("lenna.bmp");
if (img.empty()) {
cerr << "Image load failed!" << endl;
return -1;
}
namedWindow("img");
imshow("img", img);
while (true) {
int keycode = waitKey();
//i키나 I키를 누르면 이미지 반전
if (keycode == 'i' || keycode == 'I') {
img = ~img;
imshow("img", img);
}
//esc나 q나 Q를 누르면 반복문 빠져나감
else if (keycode == 27 || keycode == 'q' || keycode == 'Q') {
break;
}
}
return 0;
}
마우스 이벤트 처리
setMouseCallback() 함수 : 특정 창에 마우스 콜백 함수를 등록하는 함수
int main(void)
{
img = imread("lenna.bmp");
if (img.empty()) {
cerr << "Image load failed!" << endl;
return -1;
}
namedWindow("img");
//setMouseCallback(마우스 이벤트를 처리할 창의 이름, 콜백 함수 이름)
setMouseCallback("img", on_mouse);
imshow("img", img);
waitKey();
return 0;
}
void on_mouse(int event, int x, int y, int flags, void*)
{
switch (event) {
case EVENT_LBUTTONDOWN: //마우스 왼쪽 버튼이 눌릴때
ptOld = Point(x, y); //좌표 저장
cout << "EVENT_LBUTTONDOWN: " << x << ", " << y << endl;
break;
case EVENT_LBUTTONUP: //마우스 왼쪽 버튼을 누르고 있을 때
cout << "EVENT_LBUTTONUP: " << x << ", " << y << endl;
break;
case EVENT_MOUSEMOVE: //마우스 왼쪽 버튼을 뗐을 때
if (flags & EVENT_FLAG_LBUTTON) {
line(img, ptOld, Point(x, y), Scalar(0, 255, 255), 2); //노란색 직선 표시
imshow("img", img);
ptOld = Point(x, y);
}
break;
default:
break;
}
}
트랙바 사용하기
createTrackbar() 함수 : 트랙바를 생성하는 함수
int main(void)
{
Mat img = Mat::zeros(400, 400, CV_8UC1);
namedWindow("image");
//createTrackbar(트랙바 이름, 트랙바를 생성할 창 이름, 트랙바 위치를 받을 정수형 변수 주소,
//트랙바 최대 위치, 트랙바 위치가 변경될 때마다 호출되게 만들 콜백 함수 이름, 데이터 포인터)
createTrackbar("level", "image", 0, 16, on_level_change, (void*)&img);
imshow("image", img);
waitKey();
return 0;
}
void on_level_change(int pos, void* userdata)
{
Mat img = *(Mat*)userdata;
img.setTo(pos * 16);
imshow("image", img);
}
728x90
'런닝머신 (ML)' 카테고리의 다른 글
[컴퓨터 비전 & 머신러닝] 유용한 OpenCV 기능 (0) | 2023.04.05 |
---|---|
[컴퓨터 비전 & 머신러닝] OpenCV 데이터 파일 출력 (0) | 2023.03.29 |
[컴퓨터 비전 & 머신러닝] 함수 그리기 (0) | 2023.03.27 |
[컴퓨터 비전 & 머신러닝] 카메라와 동영상 파일 다루기 (0) | 2023.03.23 |
[컴퓨터 비전 & 머신러닝] InputArray와 OutputArray 클래스 (0) | 2023.03.20 |