OpenCV 鼠标事件

      OpenCV的支持检测鼠标事件。这是非常简单的做到这一点。我们可以检测到特定的鼠标事件和鼠标指针(X,Y)坐标在图像坐标(不是窗口坐标),    

下面是一个简单的例子,检测鼠标左键点击事件和它(X,Y)坐标。

#include "stdafx.h"
#include <cv.h>
#include <highgui.h>


//callback function
void mouseEvent(int evt, int x, int y, int flags, void* param){
    if(evt==CV_EVENT_LBUTTONDOWN){
        printf("%d %d\n",x,y);
    }
}


int main()
{

        cvNamedWindow("MyWindow");

        //assigning the callback function for mouse events
        cvSetMouseCallback("MyWindow", mouseEvent, 0);

        //load and display an image
        IplImage* img = cvLoadImage("C:/MyPic.jpg");
        cvShowImage("MyWindow", img);
        
        //wait for key press
        cvWaitKey(0);
      
        //cleaning up
        cvDestroyWindow("MyWindow");
        cvReleaseImage(&img);
       
        return 0;
} 




总结

在此应用中,它在图像窗口中检测到鼠标左键按下打印出(X,Y)坐标。   

这里是新的OpenCV的职能 ,在上面的例子。

  • cvSetMouseCallback(“MyWindow命名”,鼠标事件,0)
第一参数是与鼠标事件时,应监测的窗口中的名称。
第二个参数是函数的名称时将调用该鼠标事件发生指定window.This功能的原型如下。  
      无效的MouseEvent(EVT 诠释诠释诠释的标志,作废参数)
    • 对于第1个参数,这将是后
      • CV_EVENT_MOUSEMOVE - 当鼠标指针移到指定的窗口
      • CV_EVENT_LBUTTONDOWN -当按下鼠标左键指定窗口
      • CV_EVENT_RBUTTONDOWN - 上按下鼠标右键时
      • CV_EVENT_MBUTTONDOWN - 鼠标的中间按钮时,按下指定的窗口
      • CV_EVENT_LBUTTONUP - 当释 ​​放鼠标左键指定的窗口
      • CV_EVENT_RBUTTONUP - 当鼠标右键释放指定的窗口
      • CV_EVENT _MBUTTONUP - 鼠标的中间按钮被释放时,在指定的窗口

    •  对于第二和第三参数,这将是,如在上面的图像示出的鼠标指针的位置的x和y坐标。
    •   对于第4个参数,这将是后
      • CV_EVENT_FLAG_LBUTTON - 当按下鼠标左键指定的窗口
      • CV_EVENT_FLAG_RBUTTON - 当鼠标右键按下指定的窗口
      • CV_EVENT_FLAG_MBUTTON - 鼠标的中间按钮时,按下指定的窗口
      • CV_EVENT_FLAG_CTRLKEY - 当按下“Ctrl”键,任何鼠标事件发生时,
      • CV_EVENT_FLAG_SHIFTKEY - 'SHIFT'键被按下,任何鼠标事件发生时,
      • CV_EVENT_FLAG_ ALTKEY - 当按下“ALT”键,任何鼠标事件发生时,   

    • 第五个参数是用户定义的参数的第三个参数通过 

更先进的Visual C + +的范例,
这也是类似上面的例子。但是,这是先进一点点。尝试理解上的差异 和预测 

#include "stdafx.h"
#include <cv.h>
#include <highgui.h>


//callback function
void mouseEvent(int evt, int x, int y, int flags, void* param){
    if(evt==CV_EVENT_MOUSEMOVE && flags==CV_EVENT_FLAG_CTRLKEY){
        printf("%d %d\n",x,y);
    }
}


int main()
{

        cvNamedWindow("MyWindow");

        //assigning the callback function for mouse events
        cvSetMouseCallback("MyWindow", mouseEvent, 0);

        //load and display an image
        IplImage* img = cvLoadImage("C:/MyPic.jpg");
        cvShowImage("MyWindow", img);
        
        //wait for key press
        cvWaitKey(0);
      
        //cleaning up
        cvDestroyWindow("MyWindow");
        cvReleaseImage(&img);
       
        return 0;
} 


你可能感兴趣的:(OpenCV 鼠标事件)