#include <opencv2/opencv.hpp> using namespace cv; #define WINDOW_NAME "【程序窗口】" //全局函数声明部分 void on_MouseHandle(int event, int x, int y, int flags, void* param); void DrawRectangle(cv::Mat& img, cv::Rect box); //在临时变量的图片上绘制矩形 void ShowHelpText(); //全局变量声明部分 Rect g_rectanle; bool g_bDrawingBox = false; //是否进行绘制 RNG g_rng(12345); //main函数 int main(int argc, char** argv) { //准备参数 g_rectanle = Rect(-1,-1,0,0); Mat srcImage(600,800,CV_8UC3), tempImage; srcImage.copyTo(tempImage); //复制源图到临时变量 g_rectanle = Rect(-1,-1,0,0); srcImage = Scalar::all(0); //设置鼠标操作回调函数 namedWindow(WINDOW_NAME); setMouseCallback(WINDOW_NAME, on_MouseHandle,(void*)&srcImage); //程序主循环,当进行绘制的标示符 为真时,进行绘制 while (1) { srcImage.copyTo(tempImage); //复制源图到临时变量 if (g_bDrawingBox) { DrawRectangle(tempImage,g_rectanle); //当绘制的标示符为真,则进行绘制 } imshow(WINDOW_NAME, tempImage); imwrite("123.jpg", tempImage); if (waitKey(10) == 27) { break; } } return 0; } ///////////鼠标的回调函数,根据不同的鼠标事件进行不同的操作 void on_MouseHandle(int event, int x, int y, int flags, void* param) { Mat& image = *(cv::Mat*)param; //鼠标移动 消息 switch (event) { case EVENT_MOUSEMOVE: { if (g_bDrawingBox) //如果是否进行绘制的表示为真,则记录下长和宽到RECT变量中 { g_rectanle.width = x - g_rectanle.x; g_rectanle.height = y - g_rectanle.y; } } break; //左键按下 case EVENT_LBUTTONDOWN: { g_bDrawingBox = true; g_rectanle = Rect(x, y, 0, 0); //记录起始点 } break; // 起初此处遗漏掉了break;造成只能绘制出随机颜色的点,不能绘制矩形 //左键抬起消息 case EVENT_LBUTTONUP: { g_bDrawingBox = false;//置标示符为false //对宽和高小于0的处理 if (g_rectanle.width < 0) { g_rectanle.x += g_rectanle.width; g_rectanle.width *= -1; } if (g_rectanle.height < 0) { g_rectanle.y += g_rectanle.height; g_rectanle.height *= -1; } //调用函数进行绘制 DrawRectangle(image, g_rectanle); } break; default: break; } } //自定义的矩形绘制函数 void DrawRectangle(cv::Mat& img, cv::Rect box) { rectangle(img, box.tl(), box.br(), Scalar(g_rng.uniform(0,255), g_rng.uniform(0, 255), g_rng.uniform(0, 255))); }
OpenCv中的鼠标操作和滑动条的消息映射方式类似
SetMouseCallback 函数的作用是为指定的窗口设置鼠标回调函数
Void setMouseCallback(const string& winname,MouseCalllback onMouse,void* userdata = 0)
第一个参数,const string& 类型的 winname,窗口的名字。
第二个参数,MouseCallback类型的 onMouse,指定窗口里每次鼠标事件发生的时候,被调用的函数指针。
这个函数的原型的大概形式为 void Foo(int event,int x,int y,int flags,void* param).
其中event是EVENT_+变量之一,X和Y是鼠标指针在图像坐标系()中的坐标值,flags是EVENT_FLAG的组合,param 是用户定义的传递到SetMouseCallback函数调用的参数,如EVENT_MOUSEMOVE为鼠标移动消息,EVENT_LBUTTONDOWN为鼠标左键按下消息等。
在OpenCv2中,上述“EVENT_”之前可以加上“CV_”前缀。
第三个参数,void*类型的userdata,用户定义的传递到回调函数的参数,有默认值0.
相关推荐
嘉嘉鼠标游戏是一款绿色免费的适合小学生学习鼠标操作的游戏。软件操作简单,有趣好玩,便于少儿熟练掌握鼠标的运用技巧。 嘉嘉鼠标游戏使用方法 游戏规则: 1、单击。在草地上不断出现许多米老鼠,用鼠标光标对准它...
鼠标操作基本练习,方便初次接触电脑人掌握鼠标使用鼠标操作基本练习,方便初次接触电脑人掌握鼠标使用鼠标操作基本练习,方便初次接触电脑人掌握鼠标使用鼠标操作基本练习,方便初次接触电脑人掌握鼠标使用鼠标操作...
C++鼠标操作实例,实现鼠标的选点和显示,处理鼠标消息,适用于图像处理的控制选点
C语言写的鼠标操作,增加学习者对C语言的学习兴趣
能够实现3Dmax的操作功能,鼠标中间按下拖曳场景,滚轮滑动为缩放场景,右键为旋转视角
C#模拟键盘鼠标操作外部应用程式、源代码、项目集、代码下载可直接使用
一个以C语言钩子函数来实现鼠标操作的demo
HyperMesh快捷键、鼠标操作、键盘操作 不错
c语言鼠标操作源码,调用鼠标函数,里面有几个程序源码,获得鼠标位置和按钮状态等等,希望对你有用。。
这是一个RPGXP的脚本可以显示鼠标操作,目前使用感觉很不错。
这个程序能对鼠标操作进行屏幕鼠标录象,是用c#做的,比较酷哟
dev-c++开发的全鼠标操作控制台战棋,完整源代码,使用了最短路径算法,alpha-beta剪枝策略等,其中最后一版的战力相当可以,来尝试一下?
windows模拟鼠标操作,C语言程序,调用mouse_event接口,程序里面还有打开网页的操作和模拟键盘的操作
不用鼠标操作电脑 一、常见用法: 二、使用“Windows资源管理器”的快捷键 三、使用 WINDOWS键 四、使用“我的电脑”和“Windows资源管理器”的快捷键 五、使用对话框中的快捷键 六、使用“桌面”、“我的电脑”...
向日葵iPad远程控制鼠标操作先睹为快.docx
完整的工程源码,利用鼠标左键实现平移操作,利用鼠标右键实现旋转操作,利用鼠标滚轮实现缩放操作。具体讲解见https://blog.csdn.net/sunbowen63/article/details/89325314
一整套模拟键盘鼠标操作游戏的实例源码, 包括全局级后台模拟键盘鼠标操作, 注释详细,便于新手学习参考, 请勿用于非法用途!
1.鼠标操作演示(Visual C++编程 源代码)1.鼠标操作演示(Visual C++编程 源代码)1.鼠标操作演示(Visual C++编程 源代码)1.鼠标操作演示(Visual C++编程 源代码)1.鼠标操作演示(Visual C++编程 源代码)1....
python模拟鼠标操作
不用鼠标怎么操作电脑呢?请看这本小册子吧