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

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

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;
}
结果如下:


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值