opencv鼠标操作,画矩形
效果图

主要两个函数在作用

//-------------------全局函数声明部分-------------------------
//描述:全局函数的声明
//----------------------------------------//鼠标处理函数
void on_MouseHandle(int event, int x, int y, int flags, void* param);
//画矩形框函数
void DrawRectangle(cv::Mat& img, cv::Rect box);

源代码

/ Mouse.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//#include "pch.h"
#include <iostream>
#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);//-------------------全局变量声明部分-------------------------
//描述:全局变量的声明
//----------------------------------------
Rect g_rectangle;//存放要画的矩形的信息
bool g_bDrawingBox = false;//是否进行绘制
RNG g_rng(12345);//这是一个定值,里面可以是g_rng(123)也可以int main()
{//std::cout << "Hello World!\n"; //准备参数g_rectangle = Rect(-1, -1, 0, 0);Mat srcImage(600, 800, CV_8UC3), tempImage;srcImage.copyTo(tempImage);g_rectangle = 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_rectangle);imshow(WINDOW_NAME, tempImage);if (waitKey(10) == 27)//按下ESC键,程序退出break;}return 0;
}//-------------------on_MouseHandle()函数-------------------------
//描述:鼠标回调函数,根据不同的鼠标事件进行不同的操作
//----------------------------------------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_rectangle.width = x - g_rectangle.x;g_rectangle.height = y - g_rectangle.y;}}break;//左键按下消息case EVENT_LBUTTONDOWN:{g_bDrawingBox = true;g_rectangle = Rect(x, y, 0, 0);//记录起始点}break;case EVENT_LBUTTONUP://鼠标弹起,{g_bDrawingBox = false;//标识符为false//对宽和高小于零的处理if (g_rectangle.width < 0){g_rectangle.x += g_rectangle.width;g_rectangle.width *= -1;}if (g_rectangle.height< 0){g_rectangle.y += g_rectangle.height;g_rectangle.height *= -1;}//调用函数进行绘制DrawRectangle(image, g_rectangle);//绘制矩形}break;}
}//-------------------DrawRectangle()函数-------------------------
//描述:自定义的矩形绘制函数
//----------------------------------------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鼠标操作,画矩形相关推荐

  1. 小白学pyhon(opencv鼠标操作)

    opencv的鼠标交互操作主要通过两个函数实现: 第一个是cv2.setMouseCallback(windowName, onMouse [, param]) 第二个是setMouseCallbac ...

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

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

  3. 【OpenCV】OpenCV函数精讲之 -- 鼠标操作

    指定鼠标操作消息回调函数的函数为SetMouseCallback 函数原型: void setMouseCallback(conststring& winname, MouseCallback ...

  4. OpenCV利用鼠标操作测量角度

    前言 本文介绍一种在OpenCV中定义鼠标事件来进行对两条直线之间夹角的计算以及输出. 一.本文内容 利用OpenCV设置鼠标操作来进行测量角度,基本思路是通过定义鼠标事件得到三角形的三个点的坐标位置 ...

  5. OpenCV之鼠标操作

    先上代码 #include <iostream> #include <opencv2/core.hpp> #include <opencv2/highgui.hpp> ...

  6. Python,OpenCV鼠标事件进行矩形、圆形的绘制(随机颜色、随机半径)

    Python,OpenCV鼠标事件进行矩形.圆形的绘制(随机颜色.随机半径) 1. 效果图 2. 源码 参考 这篇博客将介绍鼠标事件,并介绍鼠标事件矩形.圆形的绘制: 所有的鼠标事件(左键按下.左键释 ...

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

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

  8. OpenCV————鼠标绘制和滑动条

    导入包 import cv2 import numpy as np 可以通过下面的代码来查看所有的鼠标事件函数 events=[i for i in dir(cv2) if 'EVENT' in i] ...

  9. 【学习OpenCV4】键盘鼠标操作总结

    本文分享内容来自图书<学习OpenCV 4:基于Python的算法实战>,该书内容如下: 第1章 OpenCV快速入门: 第2章 图像读写模块imgcodecs: 第3章 核心库模块cor ...

最新文章

  1. 3Dmax+V-Ray学习建筑可视化教程
  2. C#命名规则、开发习惯和风格
  3. vue打包后axios返回html,vue项目封装axios并访问接口
  4. visio 科学图形包_R可视乎|混合多个图形
  5. Vue路由传参及传参后刷新导致参数消失处理
  6. jQuery 对象与Dom 对象互转
  7. 高中上不上分数低学计算机,为什么到了高中,你的学习越来越差,越补越差?终于找到原因了...
  8. bmp转yuv格式的视频
  9. qt Model/view (模型/视图)
  10. [Luogu] 程序自动分析
  11. 【01】SylixOS下LWIP的实现---动态内存管理
  12. ps 命令 快捷键 知识点汇总
  13. jupyter notebook中Nbextensions插件功能大全
  14. 淘宝双十一实时显示成交数据是怎么实现的?
  15. 导出数据提示--secure-file-priv选项问题的解决方法
  16. 2-5 CAD基础 打断(break)和合并(join)
  17. NTL-NTL安装报错
  18. 从零开始写第一个Flutter app(八)——修改主题颜色
  19. 2022年全国资质认证补贴政策汇总详情!
  20. uniapp实现发送获取验证码

热门文章

  1. 钉钉服务器端SDK PHP版
  2. Mac OS Mountain Lion 下的Wireshark
  3. Oracle_11g_R2安装手册(图文教程)
  4. 对学校的希望和寄语_家长对学校的寄语怎么写
  5. python代码阅读技巧_30个Python程序员需要知道的编程技巧,可以让你的工作事半功倍!...
  6. 函数不可访问_C++之访问控制与继承
  7. 【Python】利用 pytesseract 识别图片中的数字
  8. 【控制】《多智能体系统的动力学分析与设计》徐光辉老师-第2章-带时延位置的离散多智能体系统的一致性
  9. 【PC工具】震精!这个云办公云平台好强大,UZERME云端超级应用平台
  10. 【PC工具】windows图片文字识别软件,天若OCR文字识别软件