在窗口中画矩形,单击鼠标左键绘制图案,单击鼠标右键清除上一次绘的矩形,但如果多先绘制了多个矩形,也只能实现清除上一次,再之前的就清除不了。

并实时地获取鼠标的坐标

#include <opencv2/opencv.hpp>
// Define our callback which we will install for
// mouse events
//
void my_mouse_callback(int event, int x, int y, int flags, void* param
);cv::Rect box;
bool drawing_box = false;
// A little subroutine to draw a box onto an image
//
void draw_box(cv::Mat& img, cv::Rect box) {cv::rectangle(img,box.tl(),box.br(),cv::Scalar(0x00, 0x00, 0xff) /* red */);
}void clear_box(cv::Mat& img, cv::Rect box) {cv::rectangle(img,box.tl(),box.br(),cv::Scalar(0x00, 0x00, 0x00) /* black */);
}
void help() {std::cout << "Call: ./ch4_ex4_1\n" <<" shows how to use a mouse to draw regions in an image." << std::endl;
}
int main(int argc, char** argv) {help();box = cv::Rect(-1, -1, 0, 0);cv::Mat image(200*3, 200*4, CV_8UC3), temp;image.copyTo(temp);//box = cv::Rect(-1, -1, 0, 0);image = cv::Scalar::all(0);cv::namedWindow("Box Example");// Here is the crucial moment where we actually install
// the callback. Note that we set the value of 'params' to
// be the image we are working with so that the callback
// will have the image to edit.
//cv::setMouseCallback("Box Example",my_mouse_callback,(void*)&image);// The main program loop. Here we copy the working image// to the temp image, and if the user is drawing, then// put the currently contemplated box onto that temp image.// Display the temp image, and wait 15ms for a keystroke,// then repeat.//for (;;) {image.copyTo(temp);if (drawing_box) draw_box(temp, box);cv::imshow("Box Example", temp);if (cv::waitKey(15) == 27) break;}return 0;
}
// This is our mouse callback. If the user
// presses the left button, we start a box.
// When the user releases that button, then we
// add the box to the current image. When the
// mouse is dragged (with the button down) we
// resize the box.
//
void my_mouse_callback(int event, int x, int y, int flags, void* param) {cv::Mat& image = *(cv::Mat*) param;switch (event) {case cv::EVENT_MOUSEMOVE: {if (drawing_box) {if (x > 799)x = 799;if (x < 0)x = 0;if (y > 599)y = 599;if (y < 0)y = 0;box.width = x - box.x;box.height = y - box.y;}printf("(%d, %d) \n", x, y);}break;case cv::EVENT_LBUTTONDOWN: {drawing_box = true;box = cv::Rect(x, y, 0, 0);}break;case cv::EVENT_LBUTTONUP: {drawing_box = false;if (box.width < 0) {box.x += box.width;box.width *= -1;}if (box.height < 0) {box.y += box.height;box.height *= -1;}draw_box(image, box);}break;case cv::EVENT_RBUTTONDOWN: {drawing_box = false;clear_box(image, box);}break;}
}

learning opencv3: 九:鼠标操作相关推荐

  1. [Python从零到壹] 九.网络爬虫之Selenium基础技术万字详解(定位元素、常用方法、键盘鼠标操作)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  2. Opencv2.4.9鼠标操作

    class Rect 成员变量有 x   y      width      heigh x y  表示左上角的坐标     width heigh 矩形的宽和高 成员函数Size Size() 面积 ...

  3. HighGUI图像用户界面初步(滑动条、鼠标操作)

    文章目录 1.Mat类简析 2.图像的载入:imread()函数 3.图像的显示:imshow()函数 4.创建窗口:namedWindow()函数 5.输出图像到文件:imwrite()函数 6.综 ...

  4. 利用Python模拟鼠标操作,一键将GIF文件载入CSDN的Markdown编辑器

    简 介: 讨论了在csdn的Markdown编译器中自动载入GIF文件的方法.使用了Python中的pyautogui软件包,可以通过Python的小程序实现一键将GIF文件载入CSDN的Markdo ...

  5. selenium自动化之鼠标操作

    在做自动化测试的时候,经常会遇到这种情况,某个页面元素,你必须要把鼠标移动到上面才能显示出元素.那么这种情况,我们怎么处理呢?,selenium给我们提供了一个类来处理这类事件--ActionChai ...

  6. opencv鼠标操作,画矩形

    opencv鼠标操作,画矩形 效果图 主要两个函数在作用 //-------------------全局函数声明部分------------------------- //描述:全局函数的声明 //- ...

  7. 鼠标在linux下如何工作,Linux操作系统下的鼠标操作

    本不想写这些玩意儿,其实我并不喜欢它们,只不过没办法,谁叫我是靠这些家伙糊口的呢! 若干年前,我自认为很喜欢Linux操作系统:若干年后,我发现我当初是何等的天真. 恩,一分钱,一分货!我坚信这一点! ...

  8. Opencv 学习笔记之——鼠标操作画出感兴趣区域

     本文为原创作品,转载请注明出处 欢迎关注我的博客:http://blog.csdn.net/hit2015spring和http://www.cnblogs.com/xujianqing/ 作者 ...

  9. C/C++学习之路_九:文件操作

    C/C++学习之路_九:文件操作 目录 概述 文件的顺序读写 文件的随机读写 windows和linux文本 获取文件状态 删除文件.重命名文件 文件缓冲区 1. 概述 1. 磁盘文件和设备文件 磁盘 ...

  10. python监控键盘输入_Python实现监控键盘鼠标操作示例【基于pyHook与pythoncom模块】...

    本文实例讲述了Python实现监控键盘鼠标操作.分享给大家供大家参考,具体如下: # -*- coding: utf-8 -*- import pythoncom import pyHook impo ...

最新文章

  1. 为什么不能在init和dealloc函数中使用accessor方法
  2. PMCAFF | 为什么我们必须关注95后市场?
  3. 软件管家公众号_软件安装管家:大学生最值得关注的公众号
  4. 启明云端分享 | sigmastar SSD201开发板网口直连PC升级
  5. 玩转Keras之Seq2Seq自动生成标题 | 附开源代码
  6. Linux中最方便的管理员获取方法
  7. Hive2.1.1、Hadoop2.7.3 部署
  8. linux-centos7 常用的基本命令--用户账号管理、查看和修改主机名
  9. 关于SQL的基础语法(一)
  10. nps browser0.95下载地址_飞兔跑腿app下载安装_飞兔跑腿软件最新版免费下载
  11. 二倍图css,css二倍图的使用
  12. python空格算一个字符吗_举例说明python中空格是属于字符
  13. 《高性能Linux服务器构建实战》——2.2节开始安装Varnish
  14. bt种子简介与magnet磁力介绍
  15. Mock Server入门及实践
  16. 【libyuv】windows构建
  17. onlyoffice5.4.2删除字体和添加字体
  18. android 会自动横屏再竖屏,Android横屏竖屏切换的问题
  19. JS自动弹出广告窗口
  20. 《OpenDRIVE1.6规格文档》5

热门文章

  1. C# Dictionary 使用;增加、移除的各种方法
  2. windows 拖拽功能
  3. html 下拉 可选可填,根据HTML下拉列表选择填充输入
  4. layuiadmin上手好难_日语中“上手”和“得意”、“下手”和“苦手”到底怎么区别?...
  5. 新车可以无牌上路7天_无牌农用拖拉机车斗载人上路?交警说了,不可以!
  6. python从入门到实践答案第十章_Python编程:从入门到实践——【作业】——第十章(文件和异常)...
  7. mysql 主节点挂机_云服务器如何重启MySQL服务,正确重启mysql
  8. InitializeSecurityDescriptor、InitializeAcl、AddAccessAllowedAce、SetSecurityDescriptorDacl
  9. App测试1-App测试概述
  10. linux学习笔记-文件属性基本知识