opencv 鼠标交互

最近在系统的学习opencv的基础知识; 之前没有去系统学习opencv基础,在用opencv的的时候会经常遇到各种问题,很有必要系统学习基础; 好的基础会让后面的学习 和实践 更加顺利;

下面贴出 opencv 鼠标交互的 代码

#include <opencv2/opencv.hpp>
using namespace cv;

#define WINDONWNAME "画矩形"

void onMouse(int event, int x, int y, int flag, void* );
void DrawRectangle(Mat& img, Rect box);

Rect g_rectangle;
Point ptOrigin;
bool g_bDrawingBox = false;
Mat frame;

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

VideoCapture cam(0);
if (!cam.isOpened())
{
return -1;
}
namedWindow(WINDONWNAME);
setMouseCallback(WINDONWNAME, onMouse, 0);

while (1)
{
cam>>frame;
DrawRectangle(frame, g_rectangle);
imshow(WINDONWNAME, frame);
ch = waitKey(10);
if (ch == 27)
{
return -1;
}
}

return 0;
}

void onMouse(int event, int x, int y, int flag, void* pagram)
{
switch (event)
{
case EVENT_LBUTTONDOWN:
{
g_bDrawingBox = true;
ptOrigin = Point(x, y);
g_rectangle = Rect(x, y, 0, 0);
break;
}

case EVENT_LBUTTONUP:
{
g_bDrawingBox = false;
break;
}

case EVENT_MOUSEMOVE:
{
if (g_bDrawingBox == true)
{
g_rectangle.x = MIN(ptOrigin.x, x);
g_rectangle.y = MIN(ptOrigin.y, y);
g_rectangle.width = abs(x - ptOrigin.x);
g_rectangle.height = abs(y - ptOrigin.y);

}
}

default:
break;
}
}

void DrawRectangle(Mat& img, Rect Box)
{
rectangle(img, g_rectangle, Scalar(255, 0, 0), 3, 8, 0);
}

时间: 2025-01-15 09:12:59

opencv 鼠标交互的相关文章

Win8交互UX——鼠标交互

针对触摸输入优化 Window 应用商店应用设计,并在默认情况下获得基本的鼠标支持. 设计和构建用户可以通过鼠标交互的 Windows 应用商店应用. 鼠标输入最适合那些需要精确指向和单击的用户交互.由于 Windows 的 UI 针对触摸的不精确特性进行了优化,所以它自然支持这种固有的精确度. 鼠标输入和触摸输入的不同之处在于,触摸可以通过对这些对象执行物理手势(如轻扫.滑动.拖动和旋转等等)模拟在屏幕上直接操作 UI 元素. 本主题介绍鼠标交互的设计注意事项.有关实现鼠标交互的信息,请参阅响

opencv鼠标画矩形

程序: 核心函数: 回调函数,注册回调函数cvSetMouseCallback 代码: #include "cv.h" #include "cxcore.h" #include "highgui.h" #include <iostream> CvRect rect=cvRect(-1,-1,0,0); CvPoint pt1=cvPoint(0,0); CvPoint pt2=cvPoint(0,0); bool draw=false

OpenGL学习笔记3 —— 绘制3D物体、鼠标交互、反向变换

/* reference http://nehe.gamedev.net/article/using_gluunproject/16013/ */ #include <windows.h> // windows系统要加这个.因为下面2个头文件的一些宏是在这个文件中定义的 #include <gl/Gl.h> #include <gl/glut.h> //这两个头文件在OpenGL程序中几乎必加. #include <cstdio> //标准输入输出,用来打印

Opencv鼠标事件

opencv的鼠标事件主要涉及两个函数 回调函数cvSetMouseCallback void cvSetMouseCallback( const char* window_name, CvMouseCallback on_mouse, void* param CV_DEFAULT(NULL)); window_name:鼠标执行的窗口名 on_mouse:每次指定窗口鼠标事件发生时被调用的函数指针 param :传递到回调函数的参数 on_mouse的原型 void Foo(int event

three.js鼠标交互

使用 2D 鼠标在 3D 场景中拾取对象 3D 的另一个重要的用户交互技术是对象拾取,即 3D 场景中的对象选择.输入设备是一个 2D 鼠标,用户实际单击的是在其中渲染 3D 场景的画布.因为当用户周绕场景运动时,渲染会发生变化,必须将鼠标的 2D 坐标动态地(在鼠标单击时)映射到场景的三维坐标空间,以确定哪些对象被选中. 在 2D 图形中,通过命中测试 来执行鼠标选择.对象拾取是 3D 中的一种命中测试形式.Three.js 通过提供一个 projector 辅助程序来简化对象拾取,它可以从

鼠标交互 用例

说明 鼠标按下的时候,在屏幕上打点,由于采用的是默认的坐标系,点并不在点击的地方,这个会在稍后的用例中描述 代码 #include <gl/glut.h> #include <Windows.h> void myDisplay(void) { glClearColor(1.0f, 1.0f, 1.0f, 0.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glFlush(); } void myMouse(int b

鼠标交互插件threex.domevents介绍

threex.domevents是一个three.js的扩展库,支持3D场景的交互.和我们操作DOM树的事件相似,名称都是一样的.所以使用起来非常方便.另外他也提供了连接操作.单击网格可实现跳转功能. 如果仅仅使用Dom事件,需要引入: <script src='threex.domevents.js'></script> 如果需要使用链接跳转,还需要引入: <script src="threex.linkify.js"></script>

鼠标交互

拖动元素 draggable(options):散列对象,如果省略参数则元素在窗体任意拖动 当元素成为可拖动元素时,类ui-draggable被添加到这个元素.在拖动过程会添加类ui-draggable-dragging. 参数:addClasses  appendTo  axis  cancel  connectToSortable  containment  cursor  cursorAt  delay  distance  drag  grid  handle  helper  ifra

学习OpenCV——鼠标事件(画框)

[cpp] view plain copy print? #include "cv.h" #include "highgui.h" bool check_line_state=false; IplImage* workImg; IplImage* imgshow; CvRect ROI_rect; void on_mouse4(int event, int x,int y,int flags,void* param) { int thickness=2; CvPoi