第十七节 鼠标的操作与相应

知识点

-event代表鼠标事件类型

-EVENT_LBUTTONDOWN鼠标左键按下

-EVENT_LBUTTONUP鼠标左键抬起

-EVENT_LBUTTONMOVE鼠标及移动



Point sp(-1, -1);

Point ep(-1, -1);

Mat temp;

static void on_draw(int event, int x, int y, int flags, void* userdata)

{

Mat image = *((Mat*)userdata);

if (event == EVENT_LBUTTONDOWN) {--判别鼠标的当前状态;

sp.x = x;--将当前的x,y坐标值发给sp.x,sp.y;

sp.y = y;

std::cout << "start point" << sp << std::endl;--输出sp的坐标;

}

else if (event == EVENT_LBUTTONUP) {

ep.x = x;

ep.y = y;

int dx = ep.x - sp.x;

int dy = ep.y - sp.y;

if (dx > 0 && dy > 0) {--判别是一个有效的矩形;

Rect box(sp.x, sp.y, dx, dy);--创建一个结构体对象box,以其实高度sp.x,sp.y以及宽度dx和高度dy来定义矩形区域

rectangle(image, box, Scalar(0, 0, 255), 2, 8, 0);--在原图像image上绘制一个红色的(Scalar(0,0,255))线宽为2,连接方式为8,不填充的矩形;

imshow("鼠标绘制", image);

imshow("ROI区域", image(box));

sp.x = -1;--如果不置为为-1,下端程序中的move条件依旧满足导致矩形移动;

sp.y = -1;

}

//std::cout << "start point" << sp << std::endl;

}

else if (event == EVENT_MOUSEMOVE) {

if (sp.x > 0 && sp.y > 0) {

ep.x = x;

ep.y = y;

int dx = ep.x - sp.x;

int dy = ep.y - sp.y;

if (dx > 0 && dy > 0) {

Rect box(sp.x, sp.y, dx, dy);

temp.copyTo(image);--将备份的绘制图形temp复制回原始图像image,以恢复上一次的状态,避免出现移动过程中的绘制残留

rectangle(image, box, Scalar(0, 0, 255), 2, 8, 0);

imshow("鼠标绘制", image);

}

}

}

}

void QUickdemo::mouse_drawing_demo(Mat& image)

{

namedWindow("鼠标绘制", WINDOW_FREERATIO);

setMouseCallback("鼠标绘制", on_draw,(void*)(&image));--鼠标绘制窗口

imshow("鼠标绘制",image);//运行直接显示图像

temp = image.clone();创建副本

}

个人理解,如有不对,请多指正

相关推荐
三佛科技-187366133971 天前
分享机械键盘MCU解决方案
单片机·嵌入式硬件·计算机外设
TESmart碲视1 天前
Mac 真正多显示器支持:TESmart USB-C KVM(搭载 DisplayLink 技术)如何实现
macos·计算机外设·电脑
error:(1 天前
蓝牙鼠标频繁卡顿?一招解决 Win10/11 的 USB 省电机制干扰问题
计算机外设
桃杬2 天前
lvgl修改输入设备驱动使其支持鼠标右键、双击、滑轮...
计算机外设
绀目澄清3 天前
unity UGUI 鼠标画线
unity·计算机外设·游戏引擎
沙尘暴炒饭3 天前
前端vue使用canvas封装图片标注功能,鼠标画矩形框,标注文字 包含下载标注之后的图片
前端·vue.js·计算机外设
sukalot4 天前
window显示驱动开发—头戴式和专用显示器
计算机外设
Gz、5 天前
京东京造K2 蓝牙/有线双模键盘键盘快捷键
计算机外设
清风6666666 天前
基于STM32单片机的无线鼠标设计
stm32·单片机·计算机外设·毕业设计·课程设计
feifeigo1236 天前
如何使用CrowPanel ESP32-S3高级HMI显示器来创建一个语音交互聊天机器人
机器人·计算机外设