본문 바로가기
배워보자!!/Opencv

[Opencv] 마우스 이벤트 추가 (cvSetMouseCallback)

by norinda 2019. 6. 24.
728x90

opencv 마우스 이벤트!

 

cvLoadImage로 로드한 IplImage에 하다가 

마우스를 클릭한 위치를 볼 수 있게 마우스 이벤트를 추가해보겠습니다.

 

이미지 로드하는 부분은 동일합니다.

void onMouseEvent(int event, int x, int y, int flags, void* userdata);

//------------------------------------------------------------

IplImage *loadIplImage = cvLoadImage(FileName);
    tempImg = cvCloneImage(loadIplImage);
    cvCopy(loadIplImage, tempImg);
    cvNamedWindow(curWindowName, 0); //영상을 표시할 윈도우를 생성(0/1)
    cvShowImage(curWindowName, loadIplImage); //윈도우에 출력
    //마우스 이벤트 등록
    cvSetMouseCallback(curWindowName, onMouseEvent, (void*)&loadIplImage);//마우스 이벤트 등록
    //
    //PictureControlView(loadIplImage);
    cvWaitKey(0); //프로그램의 동작을 잠시 멈추고 사용자로부터 키 입력을 기다린다.
    cvReleaseImage(&loadIplImage); //할당된 메모리 공간을 해제한다.
    cvDestroyWindow(curWindowName); //윈도우를 닫고, 윈도우를 위해 동적할당된 메모리 공간을 모두 해제한다. 
    //cvDestroyAllWindows(); //한번에 모든 창을 닫는다.

 

//------------------------------------------------------------

void onMouseEvent(int event, int x, int y, int flags, void* userdata)
{
    CString strTemp;
    if (event == cv::EVENT_LBUTTONDOWN)
    {
        strTemp.Format("EVENT_LBUTTONDOWN X = %d, Y = %d", x, y);
        theApp.MainDlg ->putListLog(strTemp);
    }
    if (event == cv::EVENT_LBUTTONUP)
    {
        strTemp.Format("EVENT_LBUTTONUP X = %d, Y = %d", x, y);
        theApp.MainDlg->putListLog(strTemp);
    }
    if (event == cv::EVENT_MOUSEMOVE)
    {
    }
}

 

왼쪽 마우스

press일때 EVENT_LBUTTONDOWN

release 일때 EVENT_LBUTTONUP

마우스를 움직일때 EVENT_MOUSEMOVE

이벤트가 들어옵니다.

반응형

댓글