Opencv下图像对鼠标事件的响应
直接上代码:
////////////////////////////////////////////////////////////////////////
//
// 该程序从文件中读入一幅图像,响应在图片上的左键右键消息
// 并显示点击图像的坐标,然后显示出来.
//
////////////////////////////////////////////////////////////////////////
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <cv.h>
#include <highgui.h>
#include <windows.h> //定义鼠标响应消息函数mouseHandler函数名可以自己设定,event为鼠标响应事件
/*event: CV_EVENT_LBUTTONDOWN, CV_EVENT_RBUTTONDOWN, CV_EVENT_MBUTTONDOWN,
CV_EVENT_LBUTTONUP, CV_EVENT_RBUTTONUP, CV_EVENT_MBUTTONUP,
CV_EVENT_LBUTTONDBLCLK, CV_EVENT_RBUTTONDBLCLK, CV_EVENT_MBUTTONDBLCLK,
CV_EVENT_MOUSEMOVE */ //x,y为相对于图片左上角的像素坐标
/*flags: CV_EVENT_FLAG_CTRLKEY, CV_EVENT_FLAG_SHIFTKEY, CV_EVENT_FLAG_ALTKEY,
CV_EVENT_FLAG_LBUTTON, CV_EVENT_FLAG_RBUTTON, CV_EVENT_FLAG_MBUTTON */
//void* param为用户的值传给鼠标响应函数mouseHandler
void mouseHandler(int event, int x, int y, int flags, void* param)
{
switch(event){
case CV_EVENT_LBUTTONDOWN:
printf("Left button down.PixPoint(%d,%d)\n",x,y);
break; case CV_EVENT_RBUTTONDOWN:
printf("Right button down.PixPoint(%d,%d)\n",x,y);
break;
case CV_EVENT_MBUTTONDOWN:
if(flags&CV_EVENT_FLAG_CTRLKEY)
printf("Middle button down and ctrl is press at the same time.PixPoint(%d,%d)\n",x,y);
break;
}
} int main(int argc, char *argv[])
{
IplImage* img = ; //定义图像文件指针,指向载入的原始图像
int height,width,channels; //定位图像的长度(像素),宽带(像素),通道数(指每个像素用多少个字节表示)
uchar *data; //存储图像具体的像素数据 char Image_Filename[]; //输入图像文件的文件名 printf("Please input the filename of image:\n");
scanf("%s",Image_Filename); img=cvLoadImage(Image_Filename,); //载入图像函数,第一个参数为图像名称.第二个参数为辅助参数,
//有正,零,负三种值.正数表示以三通道图像载入(三通道即一个像素用3个字节表示),0表示
//以单通道载入图像,负数代表载入图像的通道数由图像本身决定.
if(!img)
{
printf("Could not load image file: %s\n",argv[]);
exit();
} cvNamedWindow("mainWin", ); //创建一个名称为mainWin的窗口,用于显示图像.CV_WINDOW_AUTOSIZE值为1
//表示固定窗口大小,若第二个参数为0表示窗口大小可变,图像也会随着窗口的大小而改变 cvMoveWindow("mainWin", , ); //设置窗口的位置,第一个参数为窗口的名字,后面两个参数为窗口显示的位置,(0,0)表示显示在桌面的左上角. cvSetMouseCallback("mainWin",mouseHandler,NULL); //注册鼠标事件处理函数,一个参数为要响应改函数的窗口名,第二个参数自定义的鼠标事件
//处理函数,最后一个为用户需要传给鼠标事件处理函数的值,不需要传递则设为NULL cvShowImage("mainWin", img ); //在之前创建的mainWin窗口中显示图像 cvWaitKey(); //等待敲击键盘,结束程序 cvReleaseImage(&img ); //释放图像文件指针
return ;
}
运行结果如下:
Opencv下图像对鼠标事件的响应的更多相关文章
- Java:在不同界面样式下JPopupMenu与鼠标事件mousePressed表现的结果不同!
今天遇到一个郁闷的事儿: 在一个JFrame上放了一个JList元件,这个JList元件添加了鼠标事件: mouseReleased.mousePressed ... 其中,在mouseRelease ...
- Opencv step by step - 鼠标事件
鼠标事件有下面几种(没有滚轮事件,比较遗憾): #define CV_EVENT_MOUSEMOVE 0 滑动 #define CV_EVENT_LBUTTONDOWN 1 左键点击 #define ...
- libvlc 双击,鼠标事件消息响应
基于vlc 2.1 动态库实现接收双击消息的接收,使双击vlc播放画面可以全屏显示. 需要其他版本的vlc可以与我联系(有偿进行修改) 下载地址:http://download.csdn.net/de ...
- Opencv函数setMouseCallback鼠标事件响应
用户通过鼠标对图像视窗最常见的操作有: 1. 左键单击按下 2. 左键单击抬起 3. 左键按下拖动 4. 鼠标指针位置移动 单次单击操作响应事件及顺序 Opencv中setMouseCallback( ...
- opencv与mfc显示图片操作,MFC的鼠标响应在opencv图片上失效,opencv滚轮事件没有响应问题描述解决。
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11588758.html 用mfc 与OPENCV编写成. 出了很多冲突异常事件导致鼠标操作没有 ...
- win8下IE10的鼠标mouse事件响应错误BUG
具体症状就是有时候鼠标左键响应,有时候右键才能响应 问题的原因就是事件对象的detail没有复位 https://github.com/clientside/amplesdk/issues/187
- opencv入门系列教学(四)处理鼠标事件
一.鼠标事件的简单演示 opencv中的鼠标事件,值得是任何与鼠标相关的任何事物,例如左键按下,左键按下,左键双击等.我们先来看看鼠标事件有哪些,在python中执行下面代码: import cv2 ...
- 解决IE 下div与img重叠无法触发鼠标事件的问题
在IE下当我想在img标签上层显示一个div元素时,此时如果该div的background为空白(没有设置图片.或者颜色填充),会导致该div的鼠标事件失效:如果设置border为1px solid ...
- Opencv处理鼠标事件-OpenCV步步精深
在图片上双击过的位置绘制一个 圆圈 鼠标事件就是和鼠标有关的,比如左键按下,左键松开,右键按下,右键松开,双击右键等等. 我们可以通过鼠标事件获得与鼠标对应的图片上的坐标.我们通过以下函数来调用查看所 ...
随机推荐
- tar解压错误
# tar -zxvf aaa.tar.gz tar: This does not look like a tar archive tar: Skipping to next header ...
- WordPress SEO ☞ WordPress网站终极优化指南
原文地址:http://www.eastdesign.net/wordpress-seo/ 最新消息,东方设计学院 WordPress SEO 系列视频教程正在持续更新中,目前为了不至于让视频传播过于 ...
- python刷取CSDN博文访问量之一
python刷取CSDN博文访问量之一 作者:vpoet 注:这个系列我只贴代码,代码不注释.有兴趣的自己读读就懂了,纯属娱乐,望管理员抬手 若有转载一定不要注明来源 #coding=utf-8 ...
- c#将输入的人民币数字金额转换成小写
//// <summary> /// 人民币大小写金额转换 /// </summary> class RMBCapitalization { private const str ...
- Cable master(好题,二分)
Cable master Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tota ...
- 代码中实际运用memcached——.NET
本文取自:http://blog.csdn.net/dyllove98/article/details/9115947 memcached安装:============================ ...
- 使用bulkCopy心得
最近一直在到excel导入,无意中发现Bulk Insert 批量导入,于是研究了一下,在测试的时候一直有问题,然后找度娘帮忙,说新增DataTable数据结构的时候,每个列要与数据库设计时字段对应, ...
- SVG 和字符图标
制作网站往往需要使用一些图标来提高用户体验,如果我们的是一些扁平化设计的图标,我们可以选择 SVG 或 图标字体来提高用户体验. 下面对这两种技术进行比较. 开发难度: 现在的在线工具非常强大,比如 ...
- mysql操作SQL语句
二.数据库操作SQL语句1.显示服务器上当前存在什么数据库SHOW DATABASES; 2.创建名称为rewin的数据库CREATE DATABASE rewin; 3.删除名称为rewin的数据库 ...
- 用canvas绘制一个时钟
实现一个时钟的绘制和时间的显示 一,首先是页面的搭建html部分以及一点点的css代码,因为css这块用的比较少,所以就没有单独出来: <!DOCTYPE html> <html l ...