用鼠标在窗口上画矩形

#include <cv.h>

#include <highgui.h>

#include<cxcore.h>

#pragma comment(lib, "cv.lib")

#pragma comment(lib, "cxcore.lib")

#pragma comment(lib, "highgui.lib")

#define true 1

#define false 0

void my_mouse_callback(int event,int x,int y,int flags,void* param);

CvRect box;

IplImage* image;

IplImage* temp;

char drawing_box=false;

// a little subroutine to draw a box on to an image

void draw_box(IplImage* img,CvRect rect)//画矩形函数

{

cvRectangle(img,cvPoint(box.x,box.y),cvPoint(box.x+box.width,box.y+box.height),cvScalar(0,255,255,0),1,8,0);

}

int main()

{

box=cvRect(-1,-1,0,0);

image =cvCreateImage(cvSize(500,500),IPL_DEPTH_8U,3);

cvZero(image);

temp =cvCloneImage(image);

cvNamedWindow("Box example",1);

cvNamedWindow("image",1);

cvSetMouseCallback("Box example",my_mouse_callback,(void*) image);

while(1){

cvCopyImage(image,temp);

/*    if(drawing_box) draw_box(image,box);

cvShowImage("image",image);*/

if(drawing_box) draw_box(temp,box);

cvShowImage("Box example",temp);

cvShowImage("image",temp);

if(cvWaitKey(500)==27) break;

}

cvReleaseImage(&image);

cvReleaseImage(&temp);

cvDestroyWindow("Box example");

cvDestroyWindow("image");

return 0;

} //event 指定鼠标事件类型

//int x y 为事件发生时鼠标位置的x,y坐标值。

//第四个参数flags 制定了事件在事件发生时的不同状态

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.width=x-box.x;

box.height=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.x+box.width;

box.width*=-1;

}

if(box.height<0)

{

box.y+=box.height;

box.height*=-1;

}

draw_box(image,box);

}

break;

}

}

时间: 2024-10-13 16:23:07

用鼠标在窗口上画矩形的相关文章

用鼠标在窗口中画方形

//用鼠标在窗口中画方形 //作者:sandy //时间:2015-10-7 //user can draw boxes on the screen #include <cv.h> #include <highgui.h> using namespace std; CvRect box; bool drawing_box=false; //定义一个回调函数 //define our callback which we will install for mouse event //

在图片上画矩形并高亮显示矩形区域、统计矩形区域中像素情况并绘制直方图

<学习OpenCV>中文版第4章第3题 提纲 题目要求 程序代码 结果图片 题目要求: ①允许用户在图片上选择一个矩形区域,当鼠标放开,高亮显示矩形区域 ②在另一个独立窗口中,使用绘图函数绘制一个图表,分别用蓝.绿和红色表示选中区域中各种颜色的像素在指定数值范围内的数量. 程序代码: 1 #include "stdafx.h" 2 #include <cv.h> 3 #include <highgui.h> 4 using namespace std

将键盘按下的字符输出到窗口上

要实现字符的输入,也就是当用户在键盘按下某个字符按键后,要把该字符输出到窗口上,这就需要程序捕获键盘按下消息(WM_CHAR消息):将每次输入的字符都先存储到一个单独的字符串中,每当按下新的字符时,都先将字符加到字符串中,然后再在窗口当前插入符的位置把这个字符串重新输出一次. 1.首先让CTextView类捕获WM_CHAR消息,生成消息响应函数 2.接着为CTextView类添加一个成员变量: CString m_strLine,用来存储单独的字符串 3.在CTextView类的构造函数中将变

Qt Creator中如何在QLabel上画矩形框并且保存画完后的图形

问题描述: 在QLabel上显示一张图片,然后在该图片上画一个矩形框  最后保存一张带矩形框的图片 第一步: 在图片上画矩形框   网上教程很多  代码如下: 头文件 #ifndef MYQLABEL #define MYQLABEL #include <QLabel> #include <QMouseEvent> #include <QString> class MyQLabel : public QLabel{ // Q_OBJECT public: // expl

WPF 程序鼠标在窗口之外的时候,控件拿到的鼠标位置在哪里?

原文:WPF 程序鼠标在窗口之外的时候,控件拿到的鼠标位置在哪里? 在 WPF 程序中,我们有 Mouse.GetPosition(IInputElement relativeTo) 方法可以拿到鼠标当前相对于某个 WPF 控件的位置,也可以通过在 MouseMove 事件中通过 e.GetPosition(IInputElement relativeTo) 方法拿到同样的信息.不过,在任意时刻去获取鼠标位置的时候,如果鼠标在窗口之外,将获取到什么点呢? 本文将介绍鼠标在窗口之外时获取到的鼠标位

设计一个含有一个表单的页面,并且在表单上放入一个文本框。编写程序,当鼠标在页面上移动时,鼠标的坐标将显示在这个文本框中。

<form id="form1"> <P><INPUT type="text" name="txtMousePosition" size="20"></P></form> <script type="text/javascript">document.onmousemove =function() { //当鼠标移动式获取当前x,y坐标

鼠标在字体上移动,字体颜色渐变

这里的传参方法跟本博客中javascript"鼠标移入移出背景色渐变"中的传参方式相同,我贴的代码是全部都有的,大家可以复制过去直接看效果,有更好的建议的望留言…… <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>鼠标在字体上移入移出字体颜色渐变</title> <style&g

CSS如何实现当鼠标放在图片上时改变边框

CSS如何实现当鼠标放在图片上时改变边框:建议:尽可能的手写代码,可以有效的提高学习效率和深度.很多网页都有这样的效果,当鼠标放在图片链接上的时候,图片的边框会发生变化.下面就简单介绍一下如何实现此种效果.实例代码如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://ww

SWT中子窗口始终显示在主窗口上面的方法

只需要在创建子窗口的时候,设置一下其属性就可以了,所设置的属性为:SWT.ON_TOP.例如: PopUpChartWin win = new PopUpChartWin(display, SWT.SHELL_TRIM | SWT.ON_TOP); 就这样了.另外附窗口设置的属性参数一览表(别处拷贝粘贴来的). BORDER--当只有BORDER的时候,窗口是一个只有细细白色边框的空白窗口,没有title那一圈蓝色的边框,也没有最大化,最小化,关闭.不能resize,不能移动.在任务栏里右键没有