首页 > 代码库 > Opencv下图像对鼠标事件的响应
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 = 0; //定义图像文件指针,指向载入的原始图像 int height,width,channels; //定位图像的长度(像素),宽带(像素),通道数(指每个像素用多少个字节表示) uchar *data; //存储图像具体的像素数据 char Image_Filename[20]; //输入图像文件的文件名 printf("Please input the filename of image:\n"); scanf("%s",Image_Filename); img=cvLoadImage(Image_Filename,0); //载入图像函数,第一个参数为图像名称.第二个参数为辅助参数, //有正,零,负三种值.正数表示以三通道图像载入(三通道即一个像素用3个字节表示),0表示 //以单通道载入图像,负数代表载入图像的通道数由图像本身决定. if(!img) { printf("Could not load image file: %s\n",argv[1]); exit(0); } cvNamedWindow("mainWin", 0); //创建一个名称为mainWin的窗口,用于显示图像.CV_WINDOW_AUTOSIZE值为1 //表示固定窗口大小,若第二个参数为0表示窗口大小可变,图像也会随着窗口的大小而改变 cvMoveWindow("mainWin", 0, 0); //设置窗口的位置,第一个参数为窗口的名字,后面两个参数为窗口显示的位置,(0,0)表示显示在桌面的左上角. cvSetMouseCallback("mainWin",mouseHandler,NULL); //注册鼠标事件处理函数,一个参数为要响应改函数的窗口名,第二个参数自定义的鼠标事件 //处理函数,最后一个为用户需要传给鼠标事件处理函数的值,不需要传递则设为NULL cvShowImage("mainWin", img ); //在之前创建的mainWin窗口中显示图像 cvWaitKey(0); //等待敲击键盘,结束程序 cvReleaseImage(&img ); //释放图像文件指针 return 0; }
转载请注明:小刘
Opencv下图像对鼠标事件的响应
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。