用鼠标在窗口中画方形的程序------基于OpenCV+VS
/*----------------------------------------------------------------------------------------------------------------
*程序说明:
* 基于Opencv实现-----鼠标事件(利用鼠标在窗口画矩形)
*开发环境:
* win7+vs2010+opencv2.4.8
*创建时间地点:
* 陕西师范大学 2017.3.20
*参考信息:
* Learning OpenCV
*作者:
* 李先生
------------------------------------------------------------------------------------------------------------------*/
#include<opencv2\highgui\highgui.hpp>
#include<cv.h>
using namespace cv; /*------------------------------------------------------------------------------------------------------------------
* 宏定义
-------------------------------------------------------------------------------------------------------------------*/
CvRect box;
bool drawing_box = false; /*------------------------------------------------------------------------------------------------------------------
*函数功能:
* 画图函数
*参数:
* IplImage* img; 画图的位置,及在那个图片上画图
* CvRect rect 画图的参数信息
-------------------------------------------------------------------------------------------------------------------*/
void draw_box(IplImage* img,CvRect rect)
{ cvRectangle(img,cvPoint(box.x,box.y),cvPoint(box.x+box.width,box.y+box.height),cvScalar(0xff,0x00,0x00));/*red*/
} /*------------------------------------------------------------------------------------------------------------------
*函数功能: 定义回掉函数my_mouse_callback();
*参数: int event; 第一个参数必须是鼠标事件类型 int x; 事件发生时鼠标的横坐标位置 int y; 事件发生时纵坐标的位置 int flags; 每一位制定了事件发生时的不同状态 void* param; 额外参数信息
-------------------------------------------------------------------------------------------------------------------*/
void my_mouse_callback(int event,int x,int y,int flags,void* param)
{ IplImage* image = (IplImage*)param; switch(event) { case CV_EVENT_MOUSEMOVE: { if(drawing_box) { box.height = x-box.x; box.width = y-box.y; } } break; case CV_EVENT_LBUTTONDOWN: { drawing_box=true; box = cvRect(x,y,0,0); } break; case CV_EVENT_LBUTTONUP: { drawing_box=false; if(box.width<0) { box.x+=box.width; box.width*=-1; } if(box.height<0) { box.y+=box.height; box.height*=-1; } draw_box(image,box); } break; }
} /********************************************************************************************************************
*函数功能: 主函数,我们的程序从这里开始运行
********************************************************************************************************************/
int main(int argc,char* argv[])
{ box = cvRect(-1,-1,0,0); //创建一个矩阵 IplImage* image = cvCreateImage(cvSize(800,800),IPL_DEPTH_8U,3); //创建一副图片 cvZero(image); //图片矩阵的元素全部置0 IplImage* temp = cvCloneImage(image); //克隆一个临时图片 cvNamedWindow("Box Example"); //创建一个显示窗口 cvSetMouseCallback("Box Example",my_mouse_callback,(void*)image); //调用OpenCV中的实现注册函数, //这个函数是OpenCV函数库的函数 while(1) { cvCopyImage(image,temp); //这一步很重要,但是我现在还是说不清楚它的含义,有看过博客且明白的高手并且有时间请指教,没加这句,显示结果是图二 if(drawing_box) draw_box(temp,box); cvShowImage("Box Example",temp); if(cvWaitKey(15)==27)break; } cvReleaseImage(&image); cvReleaseImage(&temp); cvDestroyWindow("Box Example");
}
用鼠标在窗口中画方形的程序------基于OpenCV+VS相关推荐
- VC++ 利用MFC的CWindowDC类实现画线功能 在桌面窗口中画线 绘制彩色线条 CPen nPenStyle nWidth crColor
目录 利用MFC的CWindowDC类实现画线功能 在桌面窗口中画线 绘制彩色线条 CPen nPenStyle nWidth crColor 接上:VC++ 绘制线条 OnLButtonDown函数 ...
- halcon——在图形窗口中画坐标系
在图形窗口中画坐标系 1. 看一个案例 2. 具体要求 3. 解决方案和效果 4. 抓边工具方法 5. Blob差分方法 6. 两种方法的不同 7. 资源下载 1. 看一个案例 下图是电池UV点胶和热 ...
- VB实现指示窗口中拖动方框的程序
引自:http://dev.21tx.com/2008/11/06/14137.html 在指示窗口中拖动方框的程序如下: '用Form_Load.Map1_AfterLayerDraw.Map1_A ...
- opencv在电脑屏幕上画_opencv 用鼠标在窗口中画矩形
一些图像处理算法要求用户的参与,比如分割算法GrabCut需要用户选定初始区域或前/背景掩模,在用OpenCV实现里,就涉及到利用鼠标在图片上选定这些区域,这里讲讲常见的几种鼠标绘图: 绘制矩形并获得 ...
- java中画房子的程序_房子用java绘图(控制台)
我必须制作一个程序,要求用户输入高度和长度(均为偶数),然后程序将绘制一个房子.房子的屋顶是(宽度/ 2)行数.示例程序应如下所示: Enter height and width of the hou ...
- c语言rectangle函数画方形,C程序用rectangle画方形
程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位. 程序源代码: #include "graphics.h" main() { int x0,y0,y1 ...
- 怎么在linux的cmd中运行c项目,如何在cmd窗口编译运行c语言程序?
/ 这个很简单,只需要下载一个C/C++编译器,添加一下环境变量,之后就能在cmd窗口中编译运行C语言程序了,下面我简单介绍一下实现过程,主要内容如下: 1.下载C/C++编译器,这里可以下载MinG ...
- Windows程序的窗口和消息 -- 一个Windows程序从生到死
注:以下内容为学习笔记,多数是从书本.资料中得来,只为加深印象,及日后参考.然而本人表达能力较差,写的不好.因非翻译.非转载,只好选原创,但多数乃摘抄,实为惭愧.但若能帮助一二访客,幸甚! 1.一个完 ...
- nougat什么时候发布的_如何在Android Nougat的多个Windows中运行同一应用程序
nougat什么时候发布的 With Android Nougat, Google released an oft-requested feature: the ability to run two ...
最新文章
- Go性能测试benchmark
- 摄影测量--点位精度评定
- java开发者工具开源版_开源工具如何帮助飓风受害者
- 树状结构搜索功能_百度搜索算法全解析SEO课程笔记
- 纯CSS3实现兔斯基简单害羞表情
- 小程序获取openid时报40125
- 【MV-3D】----多视图的3D目标检测网络
- 高德地图独家携手东方时尚驾驶学校 共推“安全驾驶季”活动
- 朴素贝叶斯——凉鞋问题
- Python3,选择Python自动安装第三方库,从此跟pip说拜拜!!
- Nginx 负载均衡和动静分离
- 文件字节大小显示成M,G和K
- mysql 重命名库_MySQL 库名重命名
- 关于加快INSERT语句执行速度和 HINT /*+ append*/及nologging的使用
- CCPC-Wannafly Comet OJ 夏季欢乐赛(2019) 飞行棋
- MySQL基础~NATURAL JOIN(自然连接) 和USING的使用(SQL99语法新特性)
- warning: require(./admin.php),WordPress提示require_once() Failed opening required的解决方法
- Could not reserve enough space for 2097152KB object heap 解决
- 百度 阿里 腾讯 BAT笔试题目
- 内存池、进程池、线程池
热门文章
- linux环境下qt实验报告,青岛科技大学实验报告(实验一).doc
- c语言怎么判别输入字母大小,使用C语言判断英文字符大小写的方法
- 系统上云服务器地址,可以自己安装系统的云服务器地址
- matlab运动前无轨迹线,matlab 前轮前驱运动模型公式 和 轨迹仿真
- ann matlab,MatlabANN工具箱实用指南.doc
- linux内核编译ccflag,Linux内核模块编译失败
- oracle报609,ORA-609 错误分析及解决方法
- mysql子查询总分最高的学生_mysql高级内容
- 玩转 SpringBoot 2 快速整合 Filter 注解版
- w3cschool oracle,AJAX 数据库 | w3cschool菜鸟教程