直接上代码:

  1. ////////////////////////////////////////////////////////////////////////
  2. //
  3. // 该程序从文件中读入一幅图像,响应在图片上的左键右键消息
  4. // 并显示点击图像的坐标,然后显示出来.
  5. //
  6. ////////////////////////////////////////////////////////////////////////
  7. #include <stdlib.h>
  8. #include <stdio.h>
  9. #include <math.h>
  10. #include <cv.h>
  11. #include <highgui.h>
  12. #include <windows.h>
  13.  
  14. //定义鼠标响应消息函数mouseHandler函数名可以自己设定,event为鼠标响应事件
  15. /*event: CV_EVENT_LBUTTONDOWN, CV_EVENT_RBUTTONDOWN, CV_EVENT_MBUTTONDOWN,
  16. CV_EVENT_LBUTTONUP, CV_EVENT_RBUTTONUP, CV_EVENT_MBUTTONUP,
  17. CV_EVENT_LBUTTONDBLCLK, CV_EVENT_RBUTTONDBLCLK, CV_EVENT_MBUTTONDBLCLK,
  18. CV_EVENT_MOUSEMOVE */
  19.  
  20. //x,y为相对于图片左上角的像素坐标
  21. /*flags: CV_EVENT_FLAG_CTRLKEY, CV_EVENT_FLAG_SHIFTKEY, CV_EVENT_FLAG_ALTKEY,
  22. CV_EVENT_FLAG_LBUTTON, CV_EVENT_FLAG_RBUTTON, CV_EVENT_FLAG_MBUTTON */
  23. //void* param为用户的值传给鼠标响应函数mouseHandler
  24. void mouseHandler(int event, int x, int y, int flags, void* param)
  25. {
  26. switch(event){
  27. case CV_EVENT_LBUTTONDOWN:
  28. printf("Left button down.PixPoint(%d,%d)\n",x,y);
  29. break;
  30.  
  31. case CV_EVENT_RBUTTONDOWN:
  32. printf("Right button down.PixPoint(%d,%d)\n",x,y);
  33. break;
  34. case CV_EVENT_MBUTTONDOWN:
  35. if(flags&CV_EVENT_FLAG_CTRLKEY)
  36. printf("Middle button down and ctrl is press at the same time.PixPoint(%d,%d)\n",x,y);
  37. break;
  38. }
  39. }
  40.  
  41. int main(int argc, char *argv[])
  42. {
  43. IplImage* img = ; //定义图像文件指针,指向载入的原始图像
  44. int height,width,channels; //定位图像的长度(像素),宽带(像素),通道数(指每个像素用多少个字节表示)
  45. uchar *data; //存储图像具体的像素数据
  46.  
  47. char Image_Filename[]; //输入图像文件的文件名
  48.  
  49. printf("Please input the filename of image:\n");
  50. scanf("%s",Image_Filename);
  51.  
  52. img=cvLoadImage(Image_Filename,); //载入图像函数,第一个参数为图像名称.第二个参数为辅助参数,
  53. //有正,零,负三种值.正数表示以三通道图像载入(三通道即一个像素用3个字节表示),0表示
  54. //以单通道载入图像,负数代表载入图像的通道数由图像本身决定.
  55. if(!img)
  56. {
  57. printf("Could not load image file: %s\n",argv[]);
  58. exit();
  59. }
  60.  
  61. cvNamedWindow("mainWin", ); //创建一个名称为mainWin的窗口,用于显示图像.CV_WINDOW_AUTOSIZE值为1
  62. //表示固定窗口大小,若第二个参数为0表示窗口大小可变,图像也会随着窗口的大小而改变
  63.  
  64. cvMoveWindow("mainWin", , ); //设置窗口的位置,第一个参数为窗口的名字,后面两个参数为窗口显示的位置,(0,0)表示显示在桌面的左上角.
  65.  
  66. cvSetMouseCallback("mainWin",mouseHandler,NULL); //注册鼠标事件处理函数,一个参数为要响应改函数的窗口名,第二个参数自定义的鼠标事件
  67. //处理函数,最后一个为用户需要传给鼠标事件处理函数的值,不需要传递则设为NULL
  68.  
  69. cvShowImage("mainWin", img ); //在之前创建的mainWin窗口中显示图像
  70.  
  71. cvWaitKey(); //等待敲击键盘,结束程序
  72.  
  73. cvReleaseImage(&img ); //释放图像文件指针
  74. return ;
  75. }

运行结果如下:

Opencv下图像对鼠标事件的响应的更多相关文章

  1. Java:在不同界面样式下JPopupMenu与鼠标事件mousePressed表现的结果不同!

    今天遇到一个郁闷的事儿: 在一个JFrame上放了一个JList元件,这个JList元件添加了鼠标事件: mouseReleased.mousePressed ... 其中,在mouseRelease ...

  2. Opencv step by step - 鼠标事件

    鼠标事件有下面几种(没有滚轮事件,比较遗憾): #define CV_EVENT_MOUSEMOVE 0 滑动 #define CV_EVENT_LBUTTONDOWN 1 左键点击 #define ...

  3. libvlc 双击,鼠标事件消息响应

    基于vlc 2.1 动态库实现接收双击消息的接收,使双击vlc播放画面可以全屏显示. 需要其他版本的vlc可以与我联系(有偿进行修改) 下载地址:http://download.csdn.net/de ...

  4. Opencv函数setMouseCallback鼠标事件响应

    用户通过鼠标对图像视窗最常见的操作有: 1. 左键单击按下 2. 左键单击抬起 3. 左键按下拖动 4. 鼠标指针位置移动 单次单击操作响应事件及顺序 Opencv中setMouseCallback( ...

  5. opencv与mfc显示图片操作,MFC的鼠标响应在opencv图片上失效,opencv滚轮事件没有响应问题描述解决。

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11588758.html 用mfc 与OPENCV编写成. 出了很多冲突异常事件导致鼠标操作没有 ...

  6. win8下IE10的鼠标mouse事件响应错误BUG

    具体症状就是有时候鼠标左键响应,有时候右键才能响应 问题的原因就是事件对象的detail没有复位 https://github.com/clientside/amplesdk/issues/187

  7. opencv入门系列教学(四)处理鼠标事件

    一.鼠标事件的简单演示 opencv中的鼠标事件,值得是任何与鼠标相关的任何事物,例如左键按下,左键按下,左键双击等.我们先来看看鼠标事件有哪些,在python中执行下面代码: import cv2 ...

  8. 解决IE 下div与img重叠无法触发鼠标事件的问题

    在IE下当我想在img标签上层显示一个div元素时,此时如果该div的background为空白(没有设置图片.或者颜色填充),会导致该div的鼠标事件失效:如果设置border为1px solid ...

  9. Opencv处理鼠标事件-OpenCV步步精深

    在图片上双击过的位置绘制一个 圆圈 鼠标事件就是和鼠标有关的,比如左键按下,左键松开,右键按下,右键松开,双击右键等等. 我们可以通过鼠标事件获得与鼠标对应的图片上的坐标.我们通过以下函数来调用查看所 ...

随机推荐

  1. yii安装配置

    Yii 的安装由如下两步组成: 从 yiiframework.com 下载 Yii 框架. 将 Yii 压缩包解压至一个 Web 可访问的目录. 提示: 安装在 Web 目录不是必须的,每个 Yii ...

  2. Valid Palindrome 解答

    Question Given a string, determine if it is a palindrome, considering only alphanumeric characters a ...

  3. 小KING教你做android项目(一)

    写在项目开始之前: 最近关于android的视频教程,入门的书籍也已经有很多了,例如我的入门就是看了mars的视频教程.但是这么一圈学习下来,觉得真正快速提高的,不是在看视频,而是在实际工作中动手做项 ...

  4. java一个简单的管理系统

    用java实现的简单管理系统 运行出来的状态 实现了新增.删除.借出.归还.排行榜简单的功能! 下面是简单的代码 首先定义一个书籍类,自己打开哦! public class Book implemen ...

  5. 使用disqus搭建comment时一件非常二的事

    近期在github 上面搭建自己的博客,搭建comment部分的时候出现了一个问题:配置都配置好了,可是comment就是不成功.昨天为这个问题折腾了了半晚上没找出原因,今天晚上我突然发现一个地方设置 ...

  6. 【计算几何初步-凸包-Jarvis步进法。】【HDU1392】Surround the Trees

    [科普]什么是BestCoder?如何参加? Surround the Trees Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65 ...

  7. React-Native post和get请求

    post: fetchData (title) { fetch(REQUEST_URL, { method: 'POST', headers: { 'Accept': 'application/jso ...

  8. sql server数据库区分大小写设置

    数据库表中字段alter Table TableName 区分大小写 ALTER Column ColumnName VARCHAR(50) COLLATE Chinese_PRC_CS_AS不区分大 ...

  9. 论i++与++i

    网上看到好多人问i++与++i到底怎么理解,网友给出的答案几乎都是一样的.如下: i++:先进行计算,然后i自增1 ++i:i自增1,然后进行计算 并且课本上给出的解释跟这个也差不多,不过这样记起来既 ...

  10. LINQ 操作符(二)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...