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