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;
      } 


      • 0
        点赞
      • 1
        收藏
        觉得还不错? 一键收藏
      • 0
        评论
      评论
      添加红包

      请填写红包祝福语或标题

      红包个数最小为10个

      红包金额最低5元

      当前余额3.43前往充值 >
      需支付:10.00
      成就一亿技术人!
      领取后你会自动成为博主和红包主的粉丝 规则
      hope_wisdom
      发出的红包
      实付
      使用余额支付
      点击重新获取
      扫码支付
      钱包余额 0

      抵扣说明:

      1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
      2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

      余额充值