2014-02-12 4 views
1

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

Я использую 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; 
    }* 

Просьба помочь.

+0

Вы должны предоставить выход, что вы получаете? Кроме того, для этой цели я бы использовал QGraphicsScene, поскольку ее легче определить и воспроизвести с объектами (изображениями), прикрепленными к сцене. – baci

+1

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

+0

Perfect ...! Большое спасибо @PavelStrakhov. – mkuse

ответ

2

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