OpenCV记录鼠标左键点击位置
2016-01-13 20:17
489 查看
如题,最近要帮师兄做一些图片标记的工作,很繁琐。写了些很简短的程序,放着吧,省的以后自己再用给弄丢了。
如下,程序完成的主要功能是:打开一个窗口,填充一张纯黑图片,但你在窗口中点击鼠标左键时,点击处会用红点标记,同时鼠标点击处的坐标值输出到.txt文件中。
不多说,上源码:
如下,程序完成的主要功能是:打开一个窗口,填充一张纯黑图片,但你在窗口中点击鼠标左键时,点击处会用红点标记,同时鼠标点击处的坐标值输出到.txt文件中。
不多说,上源码:
//---------------------------------【头文件、命名空间包含部分】----------------------------- // 描述:包含程序所使用的头文件和命名空间 //------------------------------------------------------------------------------------------------- #include <opencv2/opencv.hpp> #include <fstream> using namespace cv; using namespace std; //-----------------------------------【宏定义部分】-------------------------------------------- // 描述:定义一些辅助宏 //------------------------------------------------------------------------------------------------ #define WINDOW_NAME "【程序窗口】" //为窗口标题定义的宏 //-----------------------------------【全局函数声明部分】------------------------------------ // 描述:全局函数的声明 //------------------------------------------------------------------------------------------------ void on_MouseHandle(int event, int x, int y, int flags, void* param); void DrawLine( cv::Mat& img, cv::Point pt ); //-----------------------------------【全局变量声明部分】----------------------------------- // 描述:全局变量的声明 //----------------------------------------------------------------------------------------------- Point g_pt; //初始化 ofstream OutFile("out.txt", ios::out|ios::binary); //-----------------------------------【main( )函数】-------------------------------------------- // 描述:控制台应用程序的入口函数,我们的程序从这里开始执行 //------------------------------------------------------------------------------------------------- int main( int argc, char** argv ) { //【1】准备参数 g_pt = Point(0, 0); Mat srcImage(1024, 576,CV_8UC3); srcImage = Scalar::all(0);//黑色 //【2】设置鼠标操作回调函数 namedWindow( WINDOW_NAME ); setMouseCallback(WINDOW_NAME,on_MouseHandle,(void*)&srcImage); //【3】程序主循环,当进行绘制的标识符为真时,进行绘制 while(1) { imshow( WINDOW_NAME, srcImage ); if( waitKey( 10 ) == 27 ) break;//按下ESC键,程序退出 } OutFile.close(); 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_LBUTTONDOWN: { g_pt = Point(x, y); OutFile << g_pt.x << " " << g_pt.y << endl; //调用函数进行绘制 DrawLine( image, g_pt );//画线 } break; } } void DrawLine( cv::Mat& img, cv::Point pt ) { cv::line(img, pt, pt, cv::Scalar(0, 0, 255));//随机颜色 }
相关文章推荐
- Opencv学习之cvCreateMat的用法
- I.MX6 linux Qt 同时支持Touch、mouse
- nginx搭建直播缓存服务器
- Linux HA集群之Keepalived
- 在Linux上安装Hadoop
- 跟我学习dubbo-Dubbo监控中心的介绍与简易监控中心的安装(7)
- CentOS搭建FTP
- Debian 成为主流 Linux 操作系统的七个原因
- Linux下gcc与gdb简介
- Ubuntu下设置tomcat开启自启动
- Linux常用命令大全
- Function Set in OPEN CASCADE
- poj openjudge 1036 gugle seating
- linux shell 札记
- OpenJudge_P6047 分蛋糕(DP)
- Linux系统的命令源代码的获取方法
- hadoop2.6.0版本集群环境搭建
- 一步步学习Linux开发环境搭建与使用
- web应用发布到tomcat图片无法显示的问题
- linux服务器开启core开关,设置core文件路径