▶ 마우스를 클릭할 때마다 대응하는 화소 값 출력하기
아래는 마우스로 창으로 띄운 이미지에 어떤 부분을 좌클릭했을 때 위치와 화소값을 알려 주는 예제이다. 우클릭할 때는 단순히 Hello!가 콘솔에 출력되게 했다.
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>
void onMouse(int event, int x, int y, int flags, void* param);
int main()
{
cv::Mat image;
image = cv::imread("jecheon.jpg", CV_LOAD_IMAGE_GRAYSCALE); // 그레이 스케일로 영상 읽기
cv::imshow("Jecheon", image); //Jecheon이라는 창에 이미지 출력
cv::setMouseCallback("Jecheon", onMouse, reinterpret_cast<void*>(&image)); // 특정 창에 마우스 핸들러 설정
cv::waitKey(0);
return 0;
}
void onMouse(int event, int x, int y, int flags, void* param)
{
cv::Mat *im = reinterpret_cast<cv::Mat*>(param);
switch (event) // 이벤트 전달
{
case CV_EVENT_LBUTTONDOWN: // 마우스 좌클릭시 이벤트
std::cout << "(" << x << ", " << y << "): " << static_cast<int>(im->at<uchar>(cv::Point(x, y))) << std::endl; // (x, y)에 있는 화소값 출력
break;
case CV_EVENT_RBUTTONDOWN: // 마우스 우클릭시 이벤트
std::cout << "Hello!" << std::endl; // Hello! 출력
break;
}
}
실행 결과는 아래와 같다.
보다시피 특정 위치를 클릭했을 때는 위치와 화소값을, 우클릭했을 때는 Hello!가 콘솔에 출력되었다.
<참고자료>
[1] 로버트 라가니에 지음, 이문호 옮김, "OpenCV를 활용한 컴퓨터 비전 프로그래밍 3/e", 에이콘
'Dev > C, C++' 카테고리의 다른 글
[opencv와 C++로 컴퓨터 비전] 예쁜 타이머 만들기 (타이머 종료시 음악 재생) (6) | 2018.02.02 |
---|---|
[opencv와 C++로 컴퓨터 비전] 영상에 소금-후추 잡음(salt-and-pepper noise) 넣기 (2) | 2018.02.01 |
[opencv와 C++로 컴퓨터 비전] 영상 위에 로고 넣기 (0) | 2018.01.31 |
[opencv와 C++로 컴퓨터 비전] 영상 위에 그림 그리기 및 글쓰기 (0) | 2018.01.30 |
[opencv와 C++로 컴퓨터 비전] 영상 읽고, 띄우고, 축소하고, 좌우반전하고, 저장하기 (0) | 2018.01.29 |
C언어의 메모리 구조: 데이터(Data), 스택(Stack) 그리고 힙(Heap) 영역 (2) | 2017.10.16 |
포인터의 이해 (6) | 2017.10.09 |
opencv에서 픽셀값 접근하기 (2) | 2017.07.05 |