/*----------------------------------------------------------------------------------------------------------------
*程序说明:
*       基于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相关推荐

  1. VC++ 利用MFC的CWindowDC类实现画线功能 在桌面窗口中画线 绘制彩色线条 CPen nPenStyle nWidth crColor

    目录 利用MFC的CWindowDC类实现画线功能 在桌面窗口中画线 绘制彩色线条 CPen nPenStyle nWidth crColor 接上:VC++ 绘制线条 OnLButtonDown函数 ...

  2. halcon——在图形窗口中画坐标系

    在图形窗口中画坐标系 1. 看一个案例 2. 具体要求 3. 解决方案和效果 4. 抓边工具方法 5. Blob差分方法 6. 两种方法的不同 7. 资源下载 1. 看一个案例 下图是电池UV点胶和热 ...

  3. VB实现指示窗口中拖动方框的程序

    引自:http://dev.21tx.com/2008/11/06/14137.html 在指示窗口中拖动方框的程序如下: '用Form_Load.Map1_AfterLayerDraw.Map1_A ...

  4. opencv在电脑屏幕上画_opencv 用鼠标在窗口中画矩形

    一些图像处理算法要求用户的参与,比如分割算法GrabCut需要用户选定初始区域或前/背景掩模,在用OpenCV实现里,就涉及到利用鼠标在图片上选定这些区域,这里讲讲常见的几种鼠标绘图: 绘制矩形并获得 ...

  5. java中画房子的程序_房子用java绘图(控制台)

    我必须制作一个程序,要求用户输入高度和长度(均为偶数),然后程序将绘制一个房子.房子的屋顶是(宽度/ 2)行数.示例程序应如下所示: Enter height and width of the hou ...

  6. c语言rectangle函数画方形,C程序用rectangle画方形

    程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位. 程序源代码: #include "graphics.h" main() { int x0,y0,y1 ...

  7. 怎么在linux的cmd中运行c项目,如何在cmd窗口编译运行c语言程序?

    / 这个很简单,只需要下载一个C/C++编译器,添加一下环境变量,之后就能在cmd窗口中编译运行C语言程序了,下面我简单介绍一下实现过程,主要内容如下: 1.下载C/C++编译器,这里可以下载MinG ...

  8. Windows程序的窗口和消息 -- 一个Windows程序从生到死

    注:以下内容为学习笔记,多数是从书本.资料中得来,只为加深印象,及日后参考.然而本人表达能力较差,写的不好.因非翻译.非转载,只好选原创,但多数乃摘抄,实为惭愧.但若能帮助一二访客,幸甚! 1.一个完 ...

  9. nougat什么时候发布的_如何在Android Nougat的多个Windows中运行同一应用程序

    nougat什么时候发布的 With Android Nougat, Google released an oft-requested feature: the ability to run two ...

最新文章

  1. Go性能测试benchmark
  2. 摄影测量--点位精度评定
  3. java开发者工具开源版_开源工具如何帮助飓风受害者
  4. 树状结构搜索功能_百度搜索算法全解析SEO课程笔记
  5. 纯CSS3实现兔斯基简单害羞表情
  6. 小程序获取openid时报40125
  7. 【MV-3D】----多视图的3D目标检测网络
  8. 高德地图独家携手东方时尚驾驶学校 共推“安全驾驶季”活动
  9. 朴素贝叶斯——凉鞋问题
  10. Python3,选择Python自动安装第三方库,从此跟pip说拜拜!!
  11. Nginx 负载均衡和动静分离
  12. 文件字节大小显示成M,G和K
  13. mysql 重命名库_MySQL 库名重命名
  14. 关于加快INSERT语句执行速度和 HINT /*+ append*/及nologging的使用
  15. CCPC-Wannafly Comet OJ 夏季欢乐赛(2019) 飞行棋
  16. MySQL基础~NATURAL JOIN(自然连接) 和USING的使用(SQL99语法新特性)
  17. warning: require(./admin.php),WordPress提示require_once() Failed opening required的解决方法
  18. Could not reserve enough space for 2097152KB object heap 解决
  19. 百度 阿里 腾讯 BAT笔试题目
  20. 内存池、进程池、线程池

热门文章

  1. linux环境下qt实验报告,青岛科技大学实验报告(实验一).doc
  2. c语言怎么判别输入字母大小,使用C语言判断英文字符大小写的方法
  3. 系统上云服务器地址,可以自己安装系统的云服务器地址
  4. matlab运动前无轨迹线,matlab 前轮前驱运动模型公式 和 轨迹仿真
  5. ann matlab,MatlabANN工具箱实用指南.doc
  6. linux内核编译ccflag,Linux内核模块编译失败
  7. oracle报609,ORA-609 错误分析及解决方法
  8. mysql子查询总分最高的学生_mysql高级内容
  9. 玩转 SpringBoot 2 快速整合 Filter 注解版
  10. w3cschool oracle,AJAX 数据库 | w3cschool菜鸟教程