OpenCV的支持检测鼠标事件。这是非常简单的做到这一点。我们可以检测到特定的鼠标事件和鼠标指针(X,Y)坐标在图像坐标(不是窗口坐标), 下面是一个简单的例子,检测鼠标左键
OpenCV的支持检测鼠标事件。这是非常简单的做到这一点。我们可以检测到特定的鼠标事件和鼠标指针(X,Y)坐标在图像坐标(不是窗口坐标),
下面是一个简单的例子,检测鼠标左键点击事件和它(X,Y)坐标。
#include "stdafx.h"
#include <cv.h>
#include <highgui.h>
//callback function
void mouseEvent(int evt, int x, int y, int flags, void* param){
if(evt==CV_EVENT_LBUTTONDOWN){
printf("%d %d\n",x,y);
}
}
int main()
{
cvNamedWindow("MyWindow");
//assigning the callback function for mouse events
cvSetMouseCallback("MyWindow", mouseEvent, 0);
//load and display an image
IplImage* img = cvLoadImage("C:/MyPic.jpg");
cvShowImage("MyWindow", img);
//wait for key press
cvWaitKey(0);
//cleaning up
cvDestroyWindow("MyWindow");
cvReleaseImage(&img);
return 0;
}
总结
在此应用中,它在图像窗口中检测到鼠标左键按下打印出(X,Y)坐标。
这里是新的OpenCV的职能
,在上面的例子。
- cvSetMouseCallback(“MyWindow命名”,鼠标事件,0)
第一参数是与鼠标事件时,应监测的窗口中的名称。
第二个参数是函数的名称时将调用该鼠标事件发生指定window.This功能的原型如下。
无效的MouseEvent(EVT 诠释,诠释,诠释的标志,作废参数)
- 对于第1个参数,这将是后
- CV_EVENT_MOUSEMOVE - 当鼠标指针移到指定的窗口
- CV_EVENT_LBUTTONDOWN -当按下鼠标左键指定窗口
- CV_EVENT_RBUTTONDOWN - 上按下鼠标右键时
- CV_EVENT_MBUTTONDOWN - 鼠标的中间按钮时,按下指定的窗口
- CV_EVENT_LBUTTONUP - 当释 放鼠标左键指定的窗口
- CV_EVENT_RBUTTONUP - 当鼠标右键释放指定的窗口
- CV_EVENT _MBUTTONUP - 鼠标的中间按钮被释放时,在指定的窗口
- 对于第二和第三参数,这将是,如在上面的图像示出的鼠标指针的位置的x和y坐标。
- 对于第4个参数,这将是后
- CV_EVENT_FLAG_LBUTTON - 当按下鼠标左键指定的窗口
- CV_EVENT_FLAG_RBUTTON - 当鼠标右键按下指定的窗口
- CV_EVENT_FLAG_MBUTTON - 鼠标的中间按钮时,按下指定的窗口
- CV_EVENT_FLAG_CTRLKEY - 当按下“Ctrl”键,任何鼠标事件发生时,
- CV_EVENT_FLAG_SHIFTKEY - 'SHIFT'键被按下,任何鼠标事件发生时,
- CV_EVENT_FLAG_ ALTKEY - 当按下“ALT”键,任何鼠标事件发生时,
- 第五个参数是用户定义的参数的第三个参数通过。
更先进的Visual C + +的范例,
这也是类似上面的例子。但是,这是先进一点点。尝试理解上的差异 和预测
#include "stdafx.h"
#include <cv.h>
#include <highgui.h>
//callback function
void mouseEvent(int evt, int x, int y, int flags, void* param){
if(evt==CV_EVENT_MOUSEMOVE && flags==CV_EVENT_FLAG_CTRLKEY){
printf("%d %d\n",x,y);
}
}
int main()
{
cvNamedWindow("MyWindow");
//assigning the callback function for mouse events
cvSetMouseCallback("MyWindow", mouseEvent, 0);
//load and display an image
IplImage* img = cvLoadImage("C:/MyPic.jpg");
cvShowImage("MyWindow", img);
//wait for key press
cvWaitKey(0);
//cleaning up
cvDestroyWindow("MyWindow");
cvReleaseImage(&img);
return 0;
}