关于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 画矩形框或填充矩形

#include "stdafx.h" #include #include #include "cv.h" #include "highgui.h" using namespace cv...
  • yanglong890124
  • yanglong890124
  • 2014年06月06日 23:53
  • 21985

openCV中cvRectangle与cv::rectangle绘制矩形边框

cvRentangle和cv::rectangle函数原型对比: C:      void cvRectangle(CvArr* img, CvPoint pt1, CvPoint pt2, ...
  • fuping07
  • fuping07
  • 2016年09月19日 15:53
  • 8353

opencv在图中画矩形rectangle用法

rectangle(Mat格式的图像, Point(左上角点的列坐标, 左上角的点的行坐标), Point(右下角点的列坐标, 右下角点的行坐标), Scalar(255, 0, 0), 1, 8, ...
  • wkk15903468980
  • wkk15903468980
  • 2016年10月25日 15:45
  • 2781

我的OpenCV学习笔记(七):绘图操作

OpenCV提供了一些基本的绘图操作,比如画圆,画椭圆,画线,画矩形,在图像里插入文字等功能。 画圆使用的是circle函数,必须提供的参数是:画在出的圆显示在哪里,圆心,半径,以及画线的颜色。 ...
  • thefutureisour
  • thefutureisour
  • 2012年04月30日 14:08
  • 87252

使用OpenCV在图片中画矩形框

一种画矩形的简单方法 import cv2 import math center=[] circumference=[] def drawCircle(action, x, y, flags, u...
  • honk2012
  • honk2012
  • 2017年12月19日 18:38
  • 179

【OpenCV3】几何图形(直线、矩形、圆、椭圆、多边形等)绘制

在图像处理的过程中,我们有时需要在图像或者视频上画上一些图案或者绘上一些文字。OpenCV中提供了各种功能的绘图函数,使用这些函数,我们可以在图像上绘制直线、矩形、圆、椭圆、多边形、以及文字等等。...
  • guduruyu
  • guduruyu
  • 2017年03月30日 17:21
  • 2225

opencv画直线圆椭圆矩形

opencv画直线圆椭圆矩形
  • lihuajie1003
  • lihuajie1003
  • 2015年04月11日 23:59
  • 633

OpenCv学习笔记(七)---OpenCv中的基本绘图函数,圆,椭圆,线段,矩形,多边形的绘制(1)

(一)本节教程的目的 本节你将学到: 1--如何使用Point在图像中定义2D点 2--如何以及为何使用Scalar 3--用OpenCv的函数Line绘直线 4--用OpenCvd的函数el...
  • maweifei
  • maweifei
  • 2016年04月26日 11:43
  • 16895

OpenCV画矩形

#include using namespace cv; Rect select; bool select_flag = false; Point origin; Mat frame; void...
  • kh1445291129
  • kh1445291129
  • 2016年04月20日 21:19
  • 575

opencv-线,椭圆,长方形(矩形),圆,填充多边形绘制

#include #include #define w 400 using namespace cv; /// Function headers void MyEllipse( Mat im...
  • tianzhaixing
  • tianzhaixing
  • 2013年03月24日 17:27
  • 3450
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于opencv2.4.10鼠标操作画矩形
举报原因:
原因补充:

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