[Qt学习笔记]Qt鼠标事件mouseMoveEvent实时获取图像的坐标和像素值

本文介绍了如何使用OpenCV的mouseMoveEvent函数在Qt应用中实现实时获取鼠标在图像上的坐标和像素值,并通过QLabel显示。开发者展示了从图像加载、显示到鼠标追踪和像素值获取的完整过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、介绍

上一篇介绍了使用OpenCV的setMouseCallback回调函数实现获取鼠标点击点的图像坐标和像素值,本篇使用鼠标事件mouseMoveEvent函数来实现实时获取鼠标的坐标和对应图像点的像素值,并将结果实时显示在label控件上。

2、效果展示

123.gif

3、实现过程

3.1 图像的加载和显示

这里加载图像并在QLabel控件上显示,我这里使用OpenCV的imread函数加载了图像,然后把图像转换成QPixmap显示在QLabel上。

    img = imread("lena.png");
    cvtColor(img, img, COLOR_BGR2RGB);
    QImage disImage = QImage((const unsigned char*)(img.data), img.cols, img.rows, QImage::Format_RGB888);
    QPixmap pix = QPixmap::fromImage(disImage);

    pix.scaled(ui->lbl_pic->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation);
    ui->lbl_pic->setPixmap(pix);  // label 显示图像

这里也可以直接用QPixmap的load函数加载图像和显示,然后在mouseMoveEvent函数中要通过OpenCV获取图像的像素值时,将QPixmap格式再转换成Mat类型。

3.2 设置鼠标跟踪事件激活

激活控件内鼠标跟随属性,调用setMouseTracking(true)激活后在鼠标点击控件内区域进入mouseMoveEvent函数实现鼠标跟随。
如果想不点击鼠标在控件内移动触发mouseMoveEvent函数,就需要同时设置控件和窗口的setMouseTracking(true),这样鼠标在控件内移动时可以实时跟踪鼠标事件。

    /*激活控件鼠标跟随属性,激活后在点击鼠标后进入mouseMoveEvent函数*/
    /*如果不点击鼠标时想要在控件上触发mouseMoveEvent函数,就需要同时激活控件和窗口*/
    ui->lbl_pic->setMouseTracking(true);
    setMouseTracking(true);
void Widget::mouseMoveEvent(QMouseEvent *event)
{
    QPoint pt = event->pos();
    QRect rect = ui->lbl_pic->geometry();
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值