鼠标操作

一、鼠标操作SetMouseCallback()

 1 #include<opencv2\opencv.hpp>
 2 #include<iostream>
 3 #include<vector>
 4 using namespace cv;
 5 using namespace std;
 6
 7 #define WINDOW_NAME "【程序窗口】"
 8
 9 void on_MouseHandle(int event, int x, int y, int flags, void* param);
10 void DrawRectangle(Mat &img, Rect box);
11 void ShowHelpText();
12
13 Rect g_rectangle;
14 bool g_bDrawingBox = false; //是否进行绘制
15 RNG g_rng(12345);
16
17 int main(int argc,char** argv) {
18     //Mat image1= imread("C:\\Users\\Nelsoner\\Desktop\\Camera Roll\\05.jpg");
19     //Mat image2 = imread("C:\\Users\\Nelsoner\\Desktop\\Camera Roll\\08.jpg");
20
21     g_rectangle = Rect(-1,-1,0,0);
22     Mat srcImage(600,800,CV_8UC3),tempImage;
23     srcImage.copyTo(tempImage);
24     srcImage = Scalar::all(0);
25
26     //设置鼠标操作回掉函数
27     namedWindow(WINDOW_NAME);
28     setMouseCallback(WINDOW_NAME,on_MouseHandle,(void*)&srcImage);
29
30     //程序主循环,当进行绘制的标识符为真,进行绘制
31     while (1) {
32         srcImage.copyTo(tempImage);   //复制源图到临时变量
33         if (g_bDrawingBox)
34             DrawRectangle(tempImage,g_rectangle);
35         imshow(WINDOW_NAME,tempImage);
36         if (waitKey(10) == 27)   //按下ESC键,程序退出
37             break;
38     }
39     return 0;
40 }
41
42 void on_MouseHandle(int event, int x, int y, int flags, void* param) {
43     Mat& image = *(Mat*)param;
44     switch (event) {
45         //鼠标移动消息
46         case EVENT_MOUSEMOVE:
47         {
48             if (g_bDrawingBox)  //如果是否进行绘制的标识符为真,则记录下长和宽到Rect型变量中
49             {
50                 g_rectangle.width = x - g_rectangle.x;
51                 g_rectangle.height = y - g_rectangle.y;
52             }
53         }
54         break;
55
56         //左键按下消息
57         case EVENT_LBUTTONDOWN:
58         {
59             g_bDrawingBox = true;
60             g_rectangle = Rect(x, y, 0, 0);    //记录起始点
61         }
62         break;
63
64         //左键抬起消息
65         case EVENT_LBUTTONUP:
66         {
67             g_bDrawingBox = false;   //置标识符为false
68             //对宽和高小于0的处理
69             if (g_rectangle.width < 0) {
70                 g_rectangle.x += g_rectangle.width;
71                 g_rectangle.width *= -1;
72             }
73             if (g_rectangle.height < 0) {
74                 g_rectangle.y += g_rectangle.height;
75                 g_rectangle.height *= -1;
76             }
77             //调用函数进行绘制
78             DrawRectangle(image,g_rectangle);
79         }
80         break;
81     }
82 }
83
84 void DrawRectangle(Mat &img, Rect box)
85 {
86     rectangle(img,box.tl(),box.br(),Scalar(g_rng.uniform(0,255),g_rng.uniform(0,255), g_rng.uniform(0, 255)));
87 }

效果图:

时间: 2024-08-06 16:01:16

鼠标操作的相关文章

如何用OpenCV跟踪鼠标操作

转载:如何用OpenCV跟踪鼠标操作 http://blog.skyoung.org/2014/05/01/how-to-track-mouse/ 在视频第一帧手动标记出目标的位置是在线视觉跟踪中最基本的一个操作,实现这个操作需要检测鼠标的移动和点击事件.OpenCV提供了setMouseCallback这个函数来响应鼠标的动作,并返回鼠标在绑定窗口上的坐标位置.下面就这个函数的使用做一个简单的介绍. 首先,setMouseCallback的C++函数声明如下: 1 void onMouse(i

win7休眠的开启与关闭方法命令行操作和图文结合的鼠标操作

win7休眠的开启与关闭方法 从开始菜单中找到"附件→命令提示符",手工输入如下命令:powercfg -a,从这里可以清楚的看到,计算机是支持休眠的,显示"尚未启用休眠".仍然在命令提示符下进行操作,     开始休眠方法:手工键入如下命令: powercfg -hibernate on(关闭则为powercfg -hibernate off) 命令执行之后立即就可以生效,无需要重新启动系统,再次执行"powercfg -a"命令,这里会提示当

教你ZBrush快捷键与鼠标操作

ZBrush是一款3D图形绘制软件,功能十分强大,且比较复杂,除了菜单栏功能按钮,ZBrush®还提供了一系列快捷键与鼠标操作,熟练掌握ZBrush®快捷键与鼠标操作,可以帮助您大大节省图形创作时间.下面是快捷键与鼠标操作的具体指令及其对应的作用: 基础 工具 Tools                                                 F1 笔刷 Brushes                                               F2 笔触

用Mouse_event()来模拟鼠标操作(转载)

在自动化测试的开发中,有一些控件的ID是很难找到的,所以有些时候,我们直接设置鼠标的位置,然后是用click事件,会收到很好的效果.在Windows API中有个mouse_event函数为我们准备好了这一切. 这个函数在user32.dll这个库文件里面.我们可以在C:\WINDOWS\system32(XP系统)这个目录下找到这个文件,他是系统自带的. 我们以C#直接调用这个文件中的API为例子来说下怎么进行鼠标操作,首先在我们C#中声明引用,如果是一个基于From的程序,这个声明的位置写在

每天一个JavaScript实例-点击图片显示大图添加鼠标操作

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>每天一个JavaScript实例-点击图片显示大图添加鼠标操作</title> <style> img{padding:5px;width:100px;height:aut

ZBrush快捷键与鼠标操作

ZBrush是一款3D图形绘制软件,功能十分强大,且比较复杂,除了菜单栏功能按钮,ZBrush还提供了一系列快捷键与鼠标操作,熟练掌握ZBrush快捷键与鼠标操作,可以帮助您大大节省图形创作时间.下面是快捷键与鼠标操作的具体指令及其对应的作用: 基础 工具 Tools F1 笔刷 Brushes F2 笔触 Strokes F3 Alphas F4 纹理 Textures F5 材质 Materials F6 工具菜单 shift+F1 笔刷菜单 shift+F2 笔触菜单 shift+F3 A

selenium webDriver 鼠标操作

之前网上查资料都是 action2.click();  经测试不行的.最后发现action2.click().perform(); 才有效.至于为什么目前还不清楚,但至少会用了.现在就把我的代码copy过来: 代码示例: //只有对象是visible时才可以操作,所以要等待状态变为visible WebElement mC = driver.findElement(By.xpath("//div[contains(text(),'产品详情')]/../../div/img" )); i

WPF 中模拟键盘和鼠标操作

转载:http://www.cnblogs.com/sixty/archive/2009/08/09/1542210.html 更多经典文章:http://www.qqpjzb.cn/65015.html 其实SendKeys类提供的方法蛮好用的,可惜的是WPF中不能用了,说是WPF的消息循环方式改成了Dispatcher,所以直接调用System.Windows.Forms.SendKeys.Send()方法会报错. 不过没关系, 至少有use32的SendInput可用,通过P/Invoke

selenium webdriver 浏览器操作,编码问题,鼠标操作,键盘按键操作,显示和隐式等待

'''size 返回元素的尺寸text 获取元素的文本,测试用例中的断言<a id='cp'>文本信息</a>t_attribute(name) 获取元素属性值is_displayed() 设置该元素是否用户可见''' from selenium import webdriverdriver=webdriver.Firefox()driver.get("https://www.baidu.com") #获取输入框的尺寸size=driver.find_eleme