关于opencv2.4.10鼠标操作画矩形

原创 2016年08月30日 20:14:08
下面的实例是我参考opencv3书籍编写的代码,通过鼠标绘制不同颜色的矩形。
#include "opencv2/opencv.hpp"
#include <iostream>

using namespace cv;
using namespace std;

#define WINDOW_NAME "TEST"


void on_MouseHandle(int event,int x,int y,int flags,void* param);
void DrawRectangle(cv::Mat& img,cv::Rect box);
void showHelpText();

Rect g_rectangle;
bool g_bDrawingBox = false;
RNG g_rng(12345);


int main(int argc , char** argv)
{
	g_rectangle = Rect(-1,-1,0,0);//绘制矩形函数起点坐标,长、宽
	Mat srcImage(600,800,CV_8UC3),tempImage;
	srcImage.copyTo(tempImage);
	g_rectangle=Rect(-1,-1,0,0);
	srcImage=Scalar::all(0);

	namedWindow(WINDOW_NAME);
	setMouseCallback(WINDOW_NAME,on_MouseHandle,(void*)&srcImage);
	while(1)
	{
		srcImage.copyTo(tempImage);//复制原图像到临时变量
		if(g_bDrawingBox)		//如果标志为真,绘制矩形
			DrawRectangle(tempImage,g_rectangle);
		imshow(WINDOW_NAME,tempImage);
		if(waitKey(10)==27) break;
	
	}
	return 0;

}

void on_MouseHandle(int event,int x,int y, int flags,void* param)
{
	Mat& image= *(cv::Mat*)param;
	switch(event)
	{
	case EVENT_MOUSEMOVE:	//鼠标移动消息
		{
			if( g_bDrawingBox)//如果绘制标号为真,则记录长宽
			{
				g_rectangle.width=x-g_rectangle.x;
				g_rectangle.height=y-g_rectangle.y;
			}
		}
			break;
	case EVENT_LBUTTONDOWN:	//左键按下消息
		{
			g_bDrawingBox=true;
			g_rectangle=Rect(x,y,0,0);
		}
			break;
	case EVENT_LBUTTONUP://	左键消息抬起
		{
			g_bDrawingBox=false;
			if(g_rectangle.width<0)
			{
				g_rectangle.y+=g_rectangle.height;
				g_rectangle.height *= -1;
			}
			DrawRectangle(image,g_rectangle);
		}
			break;
	}
}
void DrawRectangle(cv::Mat& img,cv::Rect box)
{
	rectangle(img,box.tl(),box.br(),Scalar(g_rng.uniform(0,255),g_rng.uniform(0,255),g_rng.uniform(0,255)));
}

opencv学习笔记(十一)利用鼠标画出一个矩形

利用鼠标画出一个矩形。

OpenCV鼠标绘制矩形和截取图像的矩形区域

这是两个相关的程序,前者是后者的基础。实际上前一个程序也是在前面博文的基础上做的修改,请参考《在OpenCV中利用鼠标绘制直线》 。下面贴出代码。程序之一,在OpenCV中利用鼠标绘制矩形#inclu...
  • Augusdi
  • Augusdi
  • 2013年09月06日 14:31
  • 2523

winfrom-拖动鼠标绘制矩形

using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; n...
  • Joyhen
  • Joyhen
  • 2017年02月07日 13:13
  • 278

python opencv入门 鼠标绘图(4)

内容来自OpenCV-Python Tutorials 自己翻译整理 目标: 学习如何操作鼠标事件 学习cv2.setMouseCallback()函数 简单样例: 首先创建一个鼠标的回调函数,当鼠...

opencv用鼠标画矩形

代码来自《learning opencv》    #include #include void my_mouse_callback(int event,int x,int y,int flags,v...

python-opencv-鼠标事件-画框圈定目标

python-opencv-鼠标事件-画框圈定目标1、python-opencv-鼠标事件-画框圈定目标在视频/相机中,用鼠标画矩形框,圈定目标,从而获得鼠标的起始坐标点a、终止坐标点b# -*- c...
  • lql0716
  • lql0716
  • 2017年01月07日 15:12
  • 2347

python+opencv鼠标操作以及制作调色板并画图

鼠标操作: #!/usr/bin/env python import numpy as np import cv2 events=[i for i in dir(cv2) if 'EVENT' i...
  • szfhy
  • szfhy
  • 2016年04月07日 17:02
  • 1725

OpenCV 2 学习之”鼠标描点画图“

平台:Windows7 软件:VS2013, OpenCV 2.4.9 **************************************************************...

OPENCV图像处理基础(五)鼠标事件画个框

在GUI编程中会涉及到鼠标事件,通过鼠标事件可以使得人和机器的交互更为便捷。opencv中提供了一种以回调函数实现的鼠标事件机制。 下面是一个例子,通过鼠标在一张图片上画出任意大小的矩形框。 效果...

opencv中的直线拟合函数 cvFitLine

opencv中 2D 或 3D 点集的直线拟合 代码参考: http://hi.baidu.com/yuzaihuan/item/283d12f260513b43922af269 自...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于opencv2.4.10鼠标操作画矩形
举报原因:
原因补充:

(最多只允许输入30个字)