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

知识点

-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();创建副本

}

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

相关推荐
集芯微电科技有限公司17 小时前
替代TMUX1380A/TMUX1309A双向8:1单通道 4:1双通道控制多路复用器
人工智能·单片机·嵌入式硬件·生成对抗网络·计算机外设
ACP广源盛139246256734 天前
一芯搞定多屏高清@ACP#GSV1221 DP 1.4 MST 转 HDMI 1.4 高集成转换芯片
网络·人工智能·嵌入式硬件·计算机外设·电脑
开开心心就好5 天前
仅168KB的桌面图标自动隐藏工具
windows·计算机视觉·计算机外设·excel·启发式算法·宽度优先·csdn开发云
大飞记Python6 天前
刚从 Win 转 Mac?鼠标滚轮反向、触控板乱跑、第三方鼠标卡顿——这一篇就够了
macos·计算机外设·mac鼠标
优选资源分享7 天前
Pixelscope v8 屏幕放大镜 | Windows 轻量化鼠标跟随放大工具
计算机外设
ACP广源盛139246256737 天前
ASW3742@ACP# 产品规格详解
网络·人工智能·嵌入式硬件·计算机外设·电脑
nashane7 天前
HarmonyOS 6学习:悬浮键盘抖动修复与长截图“滚动裁缝”实战
学习·计算机外设·harmonyos·harmonyos 5
Joseph Cooper8 天前
Linux HID 子系统实战:从虚拟键盘到 input 事件上报
linux·c语言·计算机外设
私人珍藏库8 天前
[Windows] 鼠标速度锁定/调节工具 KeepMouseSpeedOK v3.55
计算机外设·工具·软件·win·多功能
Name_NaN_None8 天前
Android 手机投屏 iPad :公网+局域网免费方案
网络·计算机外设·电脑·远程工作