OpenCV学习笔记-用鼠标在窗口中画矩形

程序如下:

// drawBox.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "cv.h"
#include "highgui.h"


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

CvRect box;
bool drawing_box=false;
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*/
		);
}


int _tmain(int argc, char* argv[])
{
	box=cvRect(-1,-1,0,0);
	IplImage *image=cvCreateImage(
		cvSize(200,200),
		IPL_DEPTH_8U,
		3
		);
	cvZero(image);
	IplImage *temp=cvCloneImage(image);
	cvNamedWindow("Box Example");
	cvSetMouseCallback(
		"Box Example",
		my_mouse_callback,
		(void *)image
		);
	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");
}


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.width;
			box.width*=-1;
		}
		if(box.height<0)
		{
			box.y+=box.height;
			box.height*=-1;
		}
		draw_box(image,box);
							}
							break;
	}
}


运行结果如图:


参考文献:

学习OpenCV(中文版)于仕祺 刘瑞祯 译  清华大学出版社  pp:114-117.

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

superdont

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值