Координаты изображения QLabel OpenCV в Qt

Я бы хотел произвести манипуляции с изображением с помощью OpenCV на основе mouseClicks.

Я использую QLabel для отображения изображений cv :: Mat. Теперь моя проблема заключается в том, чтобы получить позиции щелчков мыши по отношению к изображению. Итак, я хотел бы (0,0) в верхнем левом углу изображения.

Ниже приводится мое событие mousePressEvent, но это неправильные координаты.

void MainWindow::mousePressEvent( QMouseEvent* ev )
{


//This seems to work thanks to Pavel
        QPoint P = ui->label->mapFrom(this, ev->pos())



    //if( ui->label->underMouse() )
    {
        QMessageBox msgBox;
        //m

sgBox.setText(QString("Click Detected X=")+QString::number(mFirstX)+QString(" Y=")+QString::number(mFirstY));
            msgBox.setText("x ="+QString::number(P.x()) + " y= " + QString::number(P.y()));
            msgBox.exec();
        }


    }

    bool MainWindow::eventFilter(QObject *obj, QEvent *event)
    {
      if (event->type() == QEvent::MouseMove)
      {


           QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
    ///////
    */// This seem to still give wrong position, these values do not match to those I get when I /// click
    ///////
            const QPoint P = ui->label->mapFrom(this, mouseEvent->pos());
            //statusBar()->showMessage(QString("Mouse move (%1,%2)").arg(mouseEvent->pos().x()).arg(mo
useEvent->pos().y()));
        statusBar()->showMessage(QString("Mouse move (%1,%2)").arg(P.x()).arg(P.y()));
      }

      return false;
    }*

Пожалуйста помоги.


person mkuse    schedule 12.02.2014    source источник
comment
Вы должны предоставить результат, что вы получите? Также для этой цели я бы использовал QGraphicsScene, так как с ней легче определять и играть с объектами (изображениями), прикрепленными к сцене.   -  person baci    schedule 13.02.2014
comment
Вам необходимо установить выравнивание QLabel на Qt::AlignTop | Qt::AlignLeft и убедиться, что его свойство scaledContents имеет значение false. Вы должны использовать ui->label->mapFrom(this, ev->pos()) для преобразования MainWindow координат в координаты метки.   -  person Pavel Strakhov    schedule 13.02.2014
comment
Идеально...! Большое спасибо @PavelStrakhov.   -  person mkuse    schedule 13.02.2014


Ответы (1)


Вам необходимо установить выравнивание QLabel на Qt::AlignTop | Qt::AlignLeft и убедиться, что его свойство scaledContents имеет значение false. Вы должны использовать ui->label->mapFrom(this, ev->pos()) для преобразования координат MainWindow в координаты метки.

person Pavel Strakhov    schedule 13.02.2014