窗口鼠标事件的响应 在鼠标窗口中绘制矩形的程序

来源:互联网 发布:数据治理成熟度模型 编辑:程序博客网 时间:2024/05/21 22:22

这里主要是训练怎么去响应鼠标响应事件,那怎么去定义鼠标响应函数呢?

void CvMouseCallback(

int event;//鼠标响应事件的类型如鼠标右键弹起,右键按下,CV_EVENT_LBUTTONDOWN,CV_EVENT_LBUTTONDOWN)

int x,//鼠标响应是所在的位置,这里x,y是指像素坐标,所以与窗口的大小无关,它只是用像素来定位

int y,

int falgs,//指定了每一个事件在发生时的不同状态

void *param//这个参数由注册鼠标响应时间的时候传入

)//cvMouseCallback名字是可以改变的,不准确,应该说必须改---


另外一个重要函数就是

CvSetMouseCallback(

const char*window_name,//窗口的名字,也就是你要捕获哪个窗口的鼠标响应事件

CvMouseCallback  on_mouse,//你的鼠标响应事件函数的名字

void * param=NULL//这个参数就是就是要传进鼠标响应事件的参数,在本例中,我使用的是将图像的地址传进去

}


下面附上

#include "cv.h"#include "highgui.h"#include "math.h"bool flag=false;CvRect box;void Mouse_Call_Back(int event,int x,int y,int flags,void *param){IplImage *image = (IplImage*)param;//cvNamedWindow("test",1);//cvPoint start;switch(event){case CV_EVENT_LBUTTONDOWN:          box.x=x;  box.y=y;break;case CV_EVENT_LBUTTONUP:box.width=abs(x-box.x);box.height=abs(y-box.y);        cvRectangle(image,cvPoint(box.x,box.y),cvPoint(x,y),cvScalar(0,255,0));//cvShowImage("test",image);break;}}int main(){  cvNamedWindow("Mouse",1);  IplImage * image =cvCreateImage(cvSize(500,500),IPL_DEPTH_8U,3);  cvZero(image);    cvSetMouseCallback("Mouse",Mouse_Call_Back,(void*)image);  while(1)  {     int ch=cvWaitKey(33); if(ch==27) break; cvShowImage("Mouse",image);       //注意显示图像,你每一次都对图像进行修改,但是不显示还是一样的,你只有一只输出图像,我刚开始就是把这个放到外面了,  }   cvWaitKey(0);  cvDestroyWindow("Mouse"); return 0;}
结果如下:


原创粉丝点击