我们在做小型项目的时候,有时为了实现良好的交互,或者更方便实时观察输入数据,通常需要使用到下列几项功能:

1.利用鼠标在所显示的图像/视频中选取ROI区域

2.实时显示鼠标所点击位置处的坐标信息

本文贴出的代码实现了上述功能,代码如下:

/*利用鼠标的响应函数实现功能*/

//在图片上画框并且鼠标放置画面位置处显示坐标

#include<iostream>

#include<opencv2/opencv.hpp>

#include <string>

using namespace cv;

using namespace std;

Rect box;//矩形对象

bool drawing_box=false;//记录是否在画矩形对象

Point leftTop;

Point mouseOn;

void help(){

cout<<"/************************************************/"<<endl;

cout<<"draw a rect using mouse and return a location when your mouse putted on it"<<endl;

}

void onmouse(int event, int x, int y, int flag, void *img)//鼠标事件回调函数,鼠标点击后执行的内容应在此

{

if(drawing_box){

box.width = x-leftTop.x;//获取矩形宽度

box.height=y-leftTop.y;//获取矩形高度

}

switch (event)

{

case CV_EVENT_LBUTTONDOWN://鼠标左键按下事件

drawing_box = true;

leftTop.x=x;

leftTop.y=y;

box = Rect(x, y, 0, 0);

break;

case CV_EVENT_MOUSEMOVE://鼠标移动事件

mouseOn.x=x;

mouseOn.y=y;

break;

case CV_EVENT_LBUTTONUP://鼠标左键松开事件

drawing_box = false;//不在画矩形

if (box.width<0){//排除宽为负的情况,在这里判断是为了优化计算,不用再移动时每次更新都要计算长宽的绝对值

box.x = box.x + box.width;//更新原点位置,使之始终符合左上角为原点

box.width = -1 * box.width;//宽度取正

}

if (box.height<0){//同上

box.y = box.y + box.height;

box.height = -1 * box.width;

}

break;

default:

break;

}

}

int main()

{

help();

Mat img = imread("mini.jpeg");//读取图像

Mat temp;

namedWindow("鼠标画个框");//窗口

setMouseCallback("鼠标画个框", onmouse,&img);

imshow("鼠标画个框", img);

while (1)

{

if (drawing_box){//不断更新正在画的矩形

img.copyTo(temp);//这句放在这里是保证了每次更新矩形框都是在没有原图的基础上更新矩形框。

rectangle(temp,Point(box.x, box.y),Point(box.x+box.width,box.y+box.height),Scalar(255,255,255));

stringstream sx;

stringstream sy;

sx<<mouseOn.x;

sy<<mouseOn.y;

string txt="("+sx.str()+","+sy.str()+")";

circle(temp,mouseOn,1,Scalar(0,255,0),1);

putText(temp,txt,mouseOn-Point(2,2), FONT_HERSHEY_SIMPLEX,0.5,Scalar(0,0,255),2);

imshow("鼠标画个框",temp);//显示

waitKey(10);

}

if (waitKey(30) == 27) {//检测是否有按下退出键

break;//退出程序

}

}

return 0;

}

代码粘贴可用,实时效果图如下:

利用鼠标在图像上画框并实时显示鼠标所点击处坐标相关推荐

  1. python鼠标画点连线_使用Matplotlib在Python中使用鼠标在图像上绘制点

    我试图用鼠标在图像上绘制点. 问题是:图像出现了,但是当我点击鼠标时,什么也没有绘制出来(即使我点击了几次).在 我的Python版本是python2.7,带有Anaconda和IPython控制台. ...

  2. MFC实时显示鼠标坐标

    实时显示鼠标坐标 方法一:在窗口的客户区实时显示鼠标坐标 以左上角为例,直接在鼠标移动消息的响应函数中添加以下代码. void CMFC_DrawView::OnMouseMove(UINT nFla ...

  3. opencv进阶学习笔记6:使用鼠标在图像上绘制矩形框或者多边形框

    基础版笔记传送门: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录: python+opencv进阶版学习笔记目录(适合有一定基础) 感兴趣区域传统绘制: openc ...

  4. 海思3559万能平台搭建:在截获的YUV图像上画框

    前言   万里长征第二步,YUV的认识和编码还在进行中,熟悉了YUV格式的原理和储存方式后,我们就可以结合第一步中从vpss通道截获的YUV图像上尝试修改,叠加自己的算法,先简单粗暴的改改,后续在替换 ...

  5. matlab图像画框,matlab代码-图像上画框

    matlab进行图像处理之后,很多时候需要在图像上画出矩形框:如,调用matlab的某个检测函数,得到结果之后,往往需要将检测结果的矩形框画在图像上,直观.方便的进行查看:下面的代码就是这个目的: f ...

  6. 上传文件实时显示网速怎么实现_担心PC程序吃内存占网速?有了它终于放心了...

    自乔帮主发布iPhone至今,智能手机已经走过了13个年头,其系统.UI.操作逻辑都已经逐步完善且相当傻瓜化. 所以总有许多人切换到PC上时,总感觉缺了那么点东西,Windows系统的生产力自然是毋庸 ...

  7. 【Qt系列】实时显示鼠标位于QGraphicsView或QGraphicsScene坐标点

    演示效果 坐标点的显示在右下角. 前言 在Graphics View框架结构主要包含三个类:场景类(QGraphicsScene).视图类(QGraphicsView)和图元类(QGraphicsIt ...

  8. 电脑解锁后黑屏有鼠标_笔记本电脑开机黑屏只显示鼠标怎么办?

    笔记本电脑如今已成为大家日常工作学习不可或缺的工具之一了,不知道大家在使用电脑时,出现过明明电脑主机是运行着的,但是显示屏却无法开启.那么关于这种情况,原因是什么呢?我们又该怎么解决呢?以下小编就来教 ...

  9. 真好用!一招轻松获取图片中鼠标点击处坐标

    点击上方"AI算法与图像处理",选择加"星标"或"置顶"重磅干货,第一时间送达 大家好,今天给大家分享,一个非常实用的技巧.通过鼠标点击获取 ...

最新文章

  1. setactive隐藏之后无法显示_WPS表格:如何显示和隐藏顶部工具栏?
  2. 阮一峰react demo代码研究的学习笔记 - demo5 debug
  3. 采用无线网桥做监控有什么优势?无线网桥的组网模式有哪些?
  4. 生产环境可以用吗_柑橘可以生产果醋吗?柑橘果醋的生产工艺是什么?
  5. The table(CF-226D)
  6. 复练-软考网规-下午案例题考点和答题技巧
  7. Flutter文本标签TextTagWidget,搜索记录流式布局显示文本标签
  8. day16 java中的package和import
  9. ubuntu安装python库_ubuntu下的python请求库的安装
  10. 点到圆弧的距离(csu1503)+几何
  11. 迅通雾霾处理技术为清晰都市保驾护航
  12. 腾讯翻译君 VS 谷歌翻译
  13. java毕业设计会员刷卡积分管理系统mybatis+源码+调试部署+系统+数据库+lw
  14. 十个值得一试的开源深度学习框架
  15. 南京服务器修复,南京戴尔服务器数据恢复
  16. spring boot整合第三方微信开发工具 weixin-java-miniapp 实现小程序微信登录
  17. 菜鸟学R语言(方差分析)
  18. 无限创建gmail邮箱账号
  19. Google 广告考试试题
  20. 人工神经网络与遗传算法,神经网络和算法的关系

热门文章

  1. 剖析:WIZnet以太网核心技术–全硬件TCP/IP协议栈
  2. NLP论文笔记合集(持续更新)
  3. 2019 6 14 研电赛STM32相关
  4. iOS底层探索二(OC 中 alloc 方法 初探)
  5. Bugku 杂项 爆照(08067CTF)
  6. java中post与get区别详解(zxy)
  7. Android 图片设置为灰色
  8. PU learning
  9. SQLite Studio软件的安装及基本使用
  10. 【Python】“大润发”、“沃尔玛”、“好德”和“农工商”四个超市都卖苹果、梨、香蕉、橘子和芒果五种水果。使用NumPy的ndarray实现以下功能。