OpenCV 2 学习之”鼠标描点画图“
来源:互联网 发布:登录注册页面模板源码 编辑:程序博客网 时间:2024/05/22 05:20
平台:Windows7
软件:VS2013, OpenCV 2.4.9
实现的功能(> _ < )~
鼠标的描点画图。左击描点、连线,右击初始化,”Esc“键退出,”1“变为灰度图。(好简陋的说~~)
使用函数:circle();
line();
SetMouseCallBack();
回调函数 原型:void onMouse(int,int,int,int,void*);
先放素材:
呆萌喵星人两坨!
废话少说,上码:
#include<iostream>#include<string>#include<opencv2/core/core.hpp>#include<opencv2/imgproc/imgproc.hpp>#include<opencv2/highgui/highgui.hpp>using namespace std;using namespace cv;Mat srcImage, tmpImage, copyImage;Point pt1, pt2;//两点坐标const string wndName("【效果图窗口】");static void onMouse(int, int, int, int, void*);//SetMouseCallBack的回调函数int main(){system("color 2F");//设定界面颜色const string fileName(...mao.jpg");//文件路径,如:“E://mao.jpg“srcImage = imread(fileName);//读取图片if (!srcImage.data)//判断是否读取成功{cout << "Can not read this file" << endl;//读取失败提示return false;}imshow("【原图窗口】", srcImage);//显示原图片namedWindow(wndName);//初始化窗口,注意:主函数中一定要先声明窗口名,不然无法回调函数onMuse();copyImage = srcImage.clone();// 复制原图片tmpImage = Mat::zeros(srcImage.size(), CV_8UC1);//初始化掩膜(全黑)setMouseCallback(wndName, onMouse, 0);//回调onMouse(),获取鼠标信息while (true){imshow(wndName, copyImage);//显示鼠标操作窗口imshow("【掩膜窗口】", tmpImage);//显示掩膜窗口int key = waitKey(10);//读入键盘操作if (key == 27)//按下”Esc“退出{break;}switch (key){case '1'://按下‘1’,如果当前为RGB图则转换为灰度图,否则初始化if (copyImage.channels() == 3){cvtColor(copyImage, copyImage, CV_BGR2GRAY);}else{copyImage = srcImage.clone();tmpImage = Mat::zeros(srcImage.size(), CV_8UC1);}break;}}return 0;}static void onMouse(int event, int x, int y, int flags, void*){static int i = 0;//点击计数switch (event){case CV_EVENT_LBUTTONDOWN://左击,获取坐标if (i == 0){pt1 = Point(x, y);circle(copyImage, pt1, 3, Scalar(0, 0, 255));//描第一个点}else{pt2 = Point(x, y);circle(copyImage, pt2, 3, Scalar(0, 0, 255));//描点line(copyImage, pt1, pt2, Scalar(0, 255, 0));//与前一点进行连线line(tmpImage, pt1, pt2, Scalar(255));//映射到掩膜pt1 = pt2;}i++;break;case CV_EVENT_RBUTTONDOWN://右击,初始化copyImage = srcImage.clone();tmpImage = Mat::zeros(srcImage.size(), CV_8UC1);i = 0;break;}imshow(wndName, copyImage);}
运行结果:
描了个喵,围住这坨呆萌喵~~~~~
0 0
- OpenCV 2 学习之”鼠标描点画图“
- OpenCV之鼠标画图
- Opencv学习之鼠标响应及画图操作
- 4.opencv之画图2
- OpenCV鼠标画图例程,鼠标绘制矩形
- OpenCV鼠标画图例程,鼠标绘制矩形
- OpenCV鼠标画图例程,鼠标绘制矩形
- OpenCV学习笔记之鼠标调用
- Opencv学习记录之鼠标窗口响应
- 1.1.2-学习Opencv与MFC混合编程之---画图工具 画直线 画圆 画矩形
- 3.opencv之画图1
- matlab 描点画图
- opencv 学习之检测角点
- opencv学习之角点检测
- Opencv学习之角点检测
- OpenCV学习之角点检测
- openCV鼠标事件学习
- opencv之鼠标事件
- 从电子基础到单片机开发工程师,多项目,重实 战,为您开启高薪之路
- 安卓平台多语言的简单实现
- A == B ? hdu acm 2054 c++
- Subsets (II)
- rabbitMQ Ubuntu下 安装指南(erlang和rabbitmq)
- OpenCV 2 学习之”鼠标描点画图“
- Android 断点续传下载
- 编程之美--从无头单链表中删除节点
- Parcelable
- 矩阵快速幂
- OC中的关键字以及一些基础概念
- Tomcat发布项目时,浏览器地址栏图标的问题
- 路由端口映射的作用
- 暴力求解法之简单枚举--除法