利用opencv3.0点击图片显示对应坐标(x,y)

news/2024/11/25 15:39:44/

(VS2013+Opencv3.0)

  1. h文件:
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;void on_mouseDisplayC(int event, int x, int y, int flags, void* ustc);
int DisplayCoordinates(IplImage* src1);
  1. CPP文件:
#include "DisplayCoordinates.h"IplImage* src = 0;
IplImage* dst = 0;void  on_mouseDisplayC(int event, int x, int y, int flags, void* ustc)//event鼠标事件代号,x,y鼠标坐标,flags拖拽和键盘操作的代号 
{static CvPoint pre_pt = { -1,-1 };//初始坐标static CvPoint cur_pt = { -1,-1 };//实时坐标CvFont font;cvInitFont(&font, CV_FONT_HERSHEY_SIMPLEX, 0.5, 0.5, 0, 1, CV_AA);///初始化字体char temp[16];if (event == CV_EVENT_LBUTTONDOWN)//左键按下,读取初始坐标,并在图像该点出划圆{cvCopy(dst, src);//将原始图片复制到dst中;sprintf_s(temp, "(%d,%d)", x, y);pre_pt = cvPoint(x, y);cvPutText(src, temp, pre_pt, &font, cvScalar(0, 255, 0, 0));//显示坐标cvCircle(src, pre_pt, 3, cvScalar(255, 0, 0, 0), CV_FILLED, CV_AA, 0);//划圆cvShowImage("src", src);cvCopy(src, dst);}else if (event == CV_EVENT_MOUSEMOVE && !(flags & CV_EVENT_FLAG_LBUTTON))//若鼠标在滑动,左键没有按下{cvCopy(dst, src);sprintf_s(temp, "(%d,%d)", x, y);cur_pt = cvPoint(x, y);cvPutText(src, temp, cur_pt, &font, cvScalar(0, 255, 0, 0));//实时显示鼠标移动的坐标cvShowImage("src", src);}else if (event == CV_EVENT_MOUSEMOVE && (flags & CV_EVENT_FLAG_LBUTTON))//event鼠标事件代号,x,y鼠标坐标,flags拖拽和键盘操作的代号 {cvCopy(dst, src);sprintf_s(temp, "(%d,%d)", x, y);cur_pt = cvPoint(x, y);cvPutText(src, temp, cur_pt, &font, cvScalar(0, 255, 0, 0));cvRectangle(src, pre_pt, cur_pt, cvScalar(0, 255, 0, 0), 1, 8, 0);//根据初始点和结束点将矩形画到图片上cvShowImage("src", src);}else if (event == CV_EVENT_LBUTTONUP)//左键松开,将在图片dst上画矩形{sprintf_s(temp, "(%d,%d)", x, y);cur_pt = cvPoint(x, y);cvPutText(src, temp, cur_pt, &font, cvScalar(0, 255, 0, 0));cvCircle(src, cur_pt, 3, cvScalar(255, 0, 0, 0), CV_FILLED, CV_AA, 0);//绘制圆形cvRectangle(src, pre_pt, cur_pt, cvScalar(0, 255, 0, 0), 1, 8, 0);//绘制矩形cvShowImage("src", src);cvCopy(src, dst);}
}
int DisplayCoordinates(IplImage* src1)
{//src = cvLoadImage("原标准模板.bmp", 1);src = cvCloneImage(src1);dst = cvCloneImage(src1);cvNamedWindow("src", 0);//定义一个“src”窗口cvSetMouseCallback("src", on_mouseDisplayC, 0);//调用回调函数cvShowImage("src", src);waitKey();return 0;
}
  1. main主函数调用:
#include "DisplayCoordinates.h"
using namespace std;
using namespace cv;void main()
{	Mat src;src = imread("1.png");IplImage* pB1 = &IplImage(src);//Mat 转IplImage//IplImage *img = cvCloneImage(pB1);DisplayCoordinates(pB1);
}
  1. 运行
    在这里插入图片描述

http://www.ppmy.cn/news/275141.html

相关文章

python 柱状图标出y值_Python——pyecharts数据可视化

关于项目 pyecharts 是一个用于生成 Echarts 图表的类库。Echarts 是百度开源的一个数据可视化 JS 库。用 Echarts 生成的图可视化效果非常棒,为了与 Python 进行对接,方便在 Python 中直接使用数据生成图,这个项目诞生了。 预热准备 进入命令行,安装pyecharts第三方库 …

sicktim571操作手册_SICK激光雷达LMS511测量数据说明

帧结构说明 LMS511的官方手册存在几个版本,在《Laser Measurement Systems of the LMS500 Product Family》的英文手册中,对单次(连续)获取测量结果的返回帧结构的说明中,容易误导用户(也可能是我没注意到细节)。 例如,对单次返回的帧结构,手册上是这样描述的。 单次获取对…

511遇见易语言学习数组变量

数组变量分为单维数组和多维数组&#xff0c;而二维数组是我们使用较多的数组&#xff0c;本节课结合画板&#xff0c;循环的嵌套&#xff0c;组件的复制讲解了数组变量&#xff0c;本节课有一定的难度。 511遇见易语言教程 易语言数组教程源码&#xff1a; .版本 2.程序集 窗…

SICK LMS511 利用串口数据采集

引言 应用LMS511或其它版本施克激光雷达时&#xff0c;可以通过SOPAS ET软件对LMS511进行设置&#xff0c;测量数据输出。更多的时候为了定制化产品&#xff0c;我们需要通过串口技术发送命令对LMS511进行设置和数据的输出。此时官方提供的Developers Guide手册对于开发者是重…

SICK激光雷达LMS511数据提取与分析

因工作需要&#xff0c;近期对SICK进行了数据提取与分析&#xff0c;将过程描述如下(最后有代码下载地址)&#xff1a; 提取&#xff1a;LMS511有网络接口&#xff0c;通过发送命令的方式即可提取数据&#xff0c;提取的数据可以保存到记事本中。具体网上搜一下即可。 推荐使…

华为android强刷系统下载地址,华为Y511官方rom固件刷机包下载_Y511原版系统强刷升级包...

在这里来给大家分享一下华为Y511的官方rom固件包&#xff0c;这些固件包都是官方原版的&#xff0c;虽说现在官方的包不是很多&#xff0c;不过以后有新的发布会一并更新上来的&#xff0c;如果有需要的可以下载下来备用了&#xff0c;同时这些固件包还可以用来救砖用的。 提示…

如和使用matlab进行求导 ,入门级教程

文章目录 问题如图所示运行结果如图代码分析完整代码完结撒花 问题如图所示 运行结果如图 代码分析 % 定义样本数量 n 500;这行代码定义了一个变量 n&#xff0c;它代表样本数量。这个变量在后面的代码中会被用到。 % 将 s 和 z 取值范围分成子区间的个数 num_intervals 40…

【每日一题Day230】LC1240铺瓷砖 | 暴力回溯

铺瓷砖【LC1240】 你是一位施工队的工长&#xff0c;根据设计师的要求准备为一套设计风格独特的房子进行室内装修。 房子的客厅大小为 n x m&#xff0c;为保持极简的风格&#xff0c;需要使用尽可能少的 正方形 瓷砖来铺盖地面。 假设正方形瓷砖的规格不限&#xff0c;边长都是…