鼠标响应绘图

原创 2012年03月29日 17:45:24

问题:

这个相当于是画点,移动快了就不连续了。


#include <cv.h>
#include <highgui.h>

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

CvPoint p = cvPoint(0,0);
CvPoint q = cvPoint(0,0);
int thickness=3;
bool draw_line = false;

void drawingline( IplImage* img, CvPoint p, CvPoint q ) {
	cvLine (
		img, 
		cvPoint(p.x,p.y),
		cvPoint(q.x,q.y),
		cvScalar(0xff,0xff,0x00),    
		thickness
		);
}

int main( int argc, char* argv[] ) {

	IplImage* image = cvCreateImage( 
		cvSize(600,500),
		IPL_DEPTH_8U,
		3
		);
	cvZero( image );
	cvNamedWindow( " Example" );

	cvSetMouseCallback( 
		" Example", 
		my_mouse_callback, 
		(void*) image 
		);
	while( 1 ) {
		if( draw_line ) drawingline( image, p , q ); 
		cvShowImage( " Example", image );
		if( cvWaitKey( 15 )==27 ) break;
	}

	cvReleaseImage( &image );
	cvDestroyWindow( " 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( draw_line ) {
		p.x = x;
		p.y = y;
		q = p;
		}
	 }
	break;
	case CV_EVENT_LBUTTONDOWN: {
		draw_line = true;
	    drawingline( image, p, q );
	   }
	break;   
	case CV_EVENT_LBUTTONUP: {
		draw_line = false; 
		drawingline( image, p, q );
	   }
	break;   
	}
}

画连续的线需要改进:

mousemove状态下,画一下段线段后,把终点赋给起点。这样每次经过一个cpu事件就画出一条小线段。(经过一个cpu时间,计算机进行一次采样)。


修改后的代码

#include <cv.h>
#include <highgui.h>

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

CvPoint p;
CvPoint q;
int thickness=3;
bool draw_line = false;
IplImage* temp = NULL;

void drawingline( IplImage* img, CvPoint p, CvPoint q ) {
	cvLine (
		img, 
		cvPoint(p.x,p.y),
		cvPoint(q.x,q.y),
		cvScalar(0xff,0xff,0x00),    
		thickness
		);
}

int main( int argc, char* argv[] ) {

	IplImage* image = cvCreateImage( 
		cvSize(600,500),
		IPL_DEPTH_8U,
		3
		);

	cvZero( image );
	cvNamedWindow( "Example" );

	cvSetMouseCallback( 
		"Example", 
		my_mouse_callback, 
		(void*) image 
		);
	
	while( 1 ) {  
		if ( draw_line )
			drawingline( image, p , q );   
		cvShowImage( "Example", image );  
		if( cvWaitKey( 15 )==27 ) break;  
	}  
	cvWaitKey(-1);

	cvReleaseImage( &image );
//	cvReleaseImage( &temp );
	cvDestroyWindow( "Example" );
}

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

	IplImage* image = (IplImage*) param;
	
	switch( event ) 
	{
	case CV_EVENT_LBUTTONDOWN: {
		draw_line = true;
		p.x = x;
		p.y = y;
	    q = p;
		drawingline( image, p , q ); 
							   }
	break; 
	case CV_EVENT_MOUSEMOVE: {
		if( draw_line ) {
			q.x = x;
			q.y = y;
			drawingline( image, p , q );
			p = q;
		}
	 }
	 break;

	case CV_EVENT_LBUTTONUP: {
		draw_line = false; 
	    }
	break;   
	}
}


【计算机图形学课程】二.MFC鼠标响应函数模拟画图软件

上一篇文章我们讲述MFC绘制图形的基本函数,包括绘制直线、绘制矩形、绘制椭圆及绘制文字,同时通过绕圆旋转和矩形平移简单的理解了图形学知识。这篇文章我将介绍鼠标响应和键盘响应,通过这些事件让学生实现一个...
  • Eastmount
  • Eastmount
  • 2016年11月20日 01:42
  • 5712

【OpenCV入门指南】第十一篇 鼠标绘图

前面介绍了图像处理中的Canny边缘检测、轮廓检测、直方图以及直方图均衡化。本篇介绍个互动性强一点内容——用鼠标绘图。在OpenCV中进行鼠标绘图也是非常简易的,主要使用到cvSetMouseCall...
  • u014365862
  • u014365862
  • 2016年09月26日 08:35
  • 471

鼠标响应操作

转自:http://www.cnblogs.com/lidabo/p/3437587.html 前言        好长时间没写博文了,今天偷偷懒写篇关于opencv2中鼠标响应操作的文章。 ...
  • mars_xiaolei
  • mars_xiaolei
  • 2016年12月23日 19:14
  • 376

[VC] 鼠标事件的响应

转自:http://blog.sina.com.cn/s/blog_4c7fa77b010007is.html 鼠标键包括左键、右键和中键(滚轮),每个键都有三种事件消息,一是被按下,二是被释放,三...
  • a527606652
  • a527606652
  • 2013年11月26日 20:12
  • 1408

利用鼠标实现画图功能 java

public class drawPanel extends JPanel implements MouseListener,MouseMotionListener{ Point start=n...
  • yuge1hao
  • yuge1hao
  • 2014年04月08日 09:10
  • 1665

【mfc】鼠标、键盘响应事件

对于mfc这东西,你真的必要跟我扯一大堆怎么类,什么派生,什么鬼东西 告诉我怎么做出一个个小功能,我记住它就可以了 这期为大家带来MFC的鼠标响应事件 这也是所谓的MFC中的“消息映射事件” 一、...
  • yongh701
  • yongh701
  • 2015年01月07日 11:58
  • 4838

python opencv入门 鼠标绘图(4)

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

Qt学习之路(32): 一个简易画板的实现(Graphics View)

Qt学习之路(32): 一个简易画板的实现(Graphics View) 2009-12-15 23:42:46 标签:C++ 教程 学习 QT教程 Qt 原创作品,允许转载,转...
  • carrie0728
  • carrie0728
  • 2016年07月07日 16:20
  • 1755

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
  • 1842

JAVA作业 窗口响应鼠标事件:鼠标在画布上画圆

题目:生成一个窗口响应鼠标事件,可以拖住鼠标在画布上画出蓝色的圆。鼠标按下和弹起的位置为圆的直径。 思想:编写框架类与画布类即可实现画板系列问题。 源代码: Circle.java packag...
  • Sugar_girl
  • Sugar_girl
  • 2016年12月03日 15:38
  • 1830
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:鼠标响应绘图
举报原因:
原因补充:

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