diff --git a/CMakeLists.txt b/CMakeLists.txt index 6a3f2958..df1cfd5f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -58,7 +58,7 @@ ENDIF(APPLE AND BUILD_AS_BUNDLE) ####### SOURCES (Projects) ####### ADD_SUBDIRECTORY( src ) - +ADD_SUBDIRECTORY( example ) diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt new file mode 100644 index 00000000..f06fa9d1 --- /dev/null +++ b/example/CMakeLists.txt @@ -0,0 +1,43 @@ +### Qt Gui stuff ### +SET(headers_ui + ../src/ObjWidget.h + ../src/Camera.h +) +#This will generate moc_* for Qt +QT4_WRAP_CPP(moc_srcs ${headers_ui}) +### Qt Gui stuff end### + +SET(SRC_FILES + main.cpp + ../src/ObjWidget.cpp + ../src/KeypointItem.cpp + ../src/qtipl.cpp + ../src/Settings.cpp + ../src/Camera.cpp + ${moc_srcs} +) + +SET(INCLUDE_DIRS + ${CMAKE_CURRENT_SOURCE_DIR} + ${OpenCV_INCLUDE_DIRS} + ${CMAKE_CURRENT_SOURCE_DIR}/../src +) + +INCLUDE(${QT_USE_FILE}) + +SET(LIBRARIES + ${OpenCV_LIBS} + ${QT_LIBRARIES} +) + +# Make sure the compiler can find include files from our library. +INCLUDE_DIRECTORIES(${INCLUDE_DIRS}) + +# Add binary called "example" that is built from the source file "main.cpp". +# The extension is automatically found. +ADD_EXECUTABLE(example ${SRC_FILES}) +TARGET_LINK_LIBRARIES(example ${LIBRARIES}) + +SET_TARGET_PROPERTIES( example + PROPERTIES OUTPUT_NAME ${PROJECT_PREFIX}-example) + diff --git a/example/main.cpp b/example/main.cpp new file mode 100644 index 00000000..762aba32 --- /dev/null +++ b/example/main.cpp @@ -0,0 +1,236 @@ +/* + * main.cpp + * + * Created on: 2011-11-15 + * Author: matlab + */ + +#include + +// Qt stuff +#include +#include +#include +#include +#include +#include + +// OpenCV stuff +#include +#include +#include +#include // for homography + +// From this project (see src folder) +#include "ObjWidget.h" + +void showUsage() +{ + printf("\n"); + printf("Usage :\n"); + printf(" ./example object.png scene.png\n"); + exit(1); +} + +int main(int argc, char * argv[]) +{ + if(argc<3) + { + showUsage(); + } + QTime time; + time.start(); + + // GUI stuff + QApplication app(argc, argv); + ObjWidget objWidget; + ObjWidget sceneWidget; + + //Load as grayscale + IplImage * objectImg = cvLoadImage(argv[1], CV_LOAD_IMAGE_GRAYSCALE); + IplImage * sceneImg = cvLoadImage(argv[2], CV_LOAD_IMAGE_GRAYSCALE); + + if(objectImg && sceneImg) + { + std::vector objectKeypoints; + std::vector sceneKeypoints; + cv::Mat objectDescriptors; + cv::Mat sceneDescriptors; + + //////////////////////////// + // EXTRACT KEYPOINTS + //////////////////////////// + // The detector can be any of (see OpenCV features2d.hpp): + // cv::FeatureDetector * detector = new cv::FastFeatureDetector(); + // cv::FeatureDetector * detector = new cv::SiftFeatureDetector(); + // cv::FeatureDetector * detector = new cv::SurfFeatureDetector(); + // cv::FeatureDetector * detector = new cv::StarFeatureDetector(); + cv::FeatureDetector * detector = new cv::SurfFeatureDetector(); + detector->detect(objectImg, objectKeypoints); + printf("Object: %d keypoints detected in %d ms\n", (int)objectKeypoints.size(), time.restart()); + detector->detect(sceneImg, sceneKeypoints); + printf("Scene: %d keypoints detected in %d ms\n", (int)sceneKeypoints.size(), time.restart()); + + //////////////////////////// + // EXTRACT DESCRIPTORS + //////////////////////////// + // The extractor can be any of (see OpenCV features2d.hpp): + // cv::DescriptorExtractor * detector = new cv::BriefDescriptorExtractor(); + // cv::DescriptorExtractor * detector = new cv::SiftFeatureDetector(); + // cv::DescriptorExtractor * detector = new cv::SurfFeatureDetector(); + cv::DescriptorExtractor * extractor = new cv::SurfDescriptorExtractor(); + extractor->compute(objectImg, objectKeypoints, objectDescriptors); + printf("Object: %d descriptors extracted in %d ms\n", objectDescriptors.rows, time.restart()); + extractor->compute(sceneImg, sceneKeypoints, sceneDescriptors); + printf("Scene: %d descriptors extracted in %d ms\n", sceneDescriptors.rows, time.restart()); + + //////////////////////////// + // NEAREST NEIGHBOR MATCHING USING FLANN LIBRARY (included in OpenCV) + //////////////////////////// + // Format descriptors for Flann + cv::Mat objectData; + cv::Mat sceneData; + if(objectDescriptors.type()!=CV_32F) { + objectDescriptors.convertTo(objectData, CV_32F); // make sure it's CV_32F + } + else { + objectData = objectDescriptors; + } + if(sceneDescriptors.type()!=CV_32F) { + sceneDescriptors.convertTo(sceneData, CV_32F); // make sure it's CV_32F + } + else { + sceneData = sceneDescriptors; + } + + // Create Flann index + cv::flann::Index treeFlannIndex(sceneData, cv::flann::KDTreeIndexParams()); + printf("Time creating FLANN index = %d ms\n", time.restart()); + + // search (nearest neighbor) + int k=2; // find the 2 nearest neighbors + cv::Mat results(objectData.rows, k, CV_32SC1); // Results index + cv::Mat dists(objectData.rows, k, CV_32FC1); // Distance results are CV_32FC1 + treeFlannIndex.knnSearch(objectData, results, dists, k, cv::flann::SearchParams() ); // maximum number of leafs checked + printf("Time nearest neighbor search = %d ms\n", time.restart()); + + //////////////////////////// + // PROCESS NEAREST NEIGHBOR RESULTS + //////////////////////////// + // Set gui data + objWidget.setData(objectKeypoints, objectDescriptors, objectImg); + sceneWidget.setData(sceneKeypoints, sceneDescriptors, sceneImg); + + // Find correspondences by NNDR (Nearest Neighbor Distance Ratio) + float nndrRatio = 0.6; + std::vector mpts_1, mpts_2; // Used for homography + std::vector indexes_1, indexes_2; // Used for homography + std::vector outlier_mask; // Used for homography + for(unsigned int i=0; i(i,0) <= nndrRatio * dists.at(i,1)) + { + mpts_1.push_back(objectKeypoints.at(i).pt); + indexes_1.push_back(i); + + mpts_2.push_back(sceneKeypoints.at(results.at(i,0)).pt); + indexes_2.push_back(results.at(i,0)); + } + } + + // FIND HOMOGRAPHY + int minInliers = 8; + if(mpts_1.size() >= minInliers) + { + cv::Mat H = findHomography(mpts_1, + mpts_2, + cv::RANSAC, + 1.0, + outlier_mask); + int inliers=0, outliers=0; + for(int k=0; k(0,0), H.at(1,0), H.at(2,0), + H.at(0,1), H.at(1,1), H.at(2,1), + H.at(0,2), H.at(1,2), H.at(2,2)); + + // GUI : Change color and add homography rectangle + QColor color(Qt::red); + int alpha = 130; + color.setAlpha(alpha); + for(int k=0; ksetPen(rectPen); + rectItem->setTransform(hTransform); + sceneWidget.addRect(rectItem); + printf("Inliers=%d Outliers=%d\n", inliers, outliers); + } + else + { + printf("Not enough matches (%d) for homography...\n", (int)mpts_1.size()); + } + + // Wait for gui + objWidget.setGraphicsViewMode(false); + objWidget.setWindowTitle("Object"); + objWidget.show(); + sceneWidget.setGraphicsViewMode(false); + sceneWidget.setWindowTitle("Scene"); + sceneWidget.show(); + int r = app.exec(); + + //////////////////////////// + //Cleanup + //////////////////////////// + delete detector; + delete extractor; + + if(objectImg) { + cvReleaseImage(&objectImg); + } + if(sceneImg) { + cvReleaseImage(&sceneImg); + } + + return r; + } + else + { + if(objectImg) { + cvReleaseImage(&objectImg); + } + if(sceneImg) { + cvReleaseImage(&sceneImg); + } + + printf("Images are not valid!\n"); + showUsage(); + } + + return 1; +} diff --git a/src/AddObjectDialog.cpp b/src/AddObjectDialog.cpp index 0983d61f..9760a1d6 100644 --- a/src/AddObjectDialog.cpp +++ b/src/AddObjectDialog.cpp @@ -1,7 +1,7 @@ #include "AddObjectDialog.h" #include "ui_addObjectDialog.h" -#include "Object.h" +#include "ObjWidget.h" #include "KeypointItem.h" #include "Camera.h" #include "qtipl.h" @@ -15,7 +15,7 @@ #include #include -AddObjectDialog::AddObjectDialog(QList * objects, QWidget * parent, Qt::WindowFlags f) : +AddObjectDialog::AddObjectDialog(QList * objects, QWidget * parent, Qt::WindowFlags f) : QDialog(parent, f), camera_(0), objects_(objects), @@ -191,7 +191,7 @@ void AddObjectDialog::setState(int state) selectedKeypoints.at(i).pt.y -= roi.y; } } - objects_->append(new Object(0, selectedKeypoints, descriptors, cvImage_, Settings::currentDetectorType(), Settings::currentDescriptorType())); + objects_->append(new ObjWidget(0, selectedKeypoints, descriptors, cvImage_, Settings::currentDetectorType(), Settings::currentDescriptorType())); cvResetImageROI(cvImage_); diff --git a/src/AddObjectDialog.h b/src/AddObjectDialog.h index 097aa21a..ae91af22 100644 --- a/src/AddObjectDialog.h +++ b/src/AddObjectDialog.h @@ -7,7 +7,7 @@ #include class Ui_addObjectDialog; -class Object; +class ObjWidget; class Camera; class KeypointItem; @@ -16,7 +16,7 @@ class AddObjectDialog : public QDialog { Q_OBJECT public: - AddObjectDialog(QList * objects, QWidget * parent = 0, Qt::WindowFlags f = 0); + AddObjectDialog(QList * objects, QWidget * parent = 0, Qt::WindowFlags f = 0); virtual ~AddObjectDialog(); private slots: @@ -37,7 +37,7 @@ private: Ui_addObjectDialog * ui_; Camera * camera_; QTimer cameraTimer_; - QList * objects_; + QList * objects_; IplImage * cvImage_; enum State{kTakePicture, kSelectFeatures, kVerifySelection, kClosing}; diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 66e40dc4..f3837798 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -4,7 +4,7 @@ SET(headers_ui ./MainWindow.h ./AddObjectDialog.h - ./Object.h + ./ObjWidget.h ./Camera.h ./ParametersToolBox.h ) @@ -38,7 +38,7 @@ SET(SRC_FILES ./Camera.cpp ./ParametersToolBox.cpp ./Settings.cpp - ./Object.cpp + ./ObjWidget.cpp ${moc_srcs} ${moc_uis} #${srcs_qrc} diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 78c4499f..0efc60c1 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -4,7 +4,7 @@ #include "ui_mainWindow.h" #include "qtipl.h" #include "KeypointItem.h" -#include "Object.h" +#include "ObjWidget.h" #include "Camera.h" #include "Settings.h" #include "ParametersToolBox.h" @@ -87,7 +87,7 @@ void MainWindow::loadObjects() QDataStream in(&file); while(!in.atEnd()) { - Object * obj = new Object(); + ObjWidget * obj = new ObjWidget(); obj->load(in); bool alreadyLoaded = false; for(int i=0; isetGraphicsViewMode(false); - QList objs = ui_->objects_area->findChildren(); + QList objs = ui_->objects_area->findChildren(); QVBoxLayout * vLayout = new QVBoxLayout(); int id = Settings::getGeneral_nextObjID().toInt(); if(obj->id() == 0) @@ -183,7 +183,7 @@ void MainWindow::showObject(Object * obj) vLayout->addLayout(hLayout); vLayout->addWidget(obj); objects_.last()->setDeletable(true); - connect(obj, SIGNAL(removalTriggered(Object*)), this, SLOT(removeObject(Object*))); + connect(obj, SIGNAL(removalTriggered(ObjWidget*)), this, SLOT(removeObject(ObjWidget*))); connect(obj, SIGNAL(destroyed(QObject *)), title, SLOT(deleteLater())); connect(obj, SIGNAL(destroyed(QObject *)), detectedLabel, SLOT(deleteLater())); connect(obj, SIGNAL(destroyed(QObject *)), detectorDescriptorType, SLOT(deleteLater())); @@ -293,6 +293,7 @@ void MainWindow::update() if(cvImage) { QTime time; + time.start(); //Convert to grayscale IplImage * imageGrayScale = 0; @@ -312,13 +313,11 @@ void MainWindow::update() } // EXTRACT KEYPOINTS - time.start(); cv::FeatureDetector * detector = Settings::createFeaturesDetector(); std::vector keypoints; detector->detect(img, keypoints); delete detector; - ui_->label_timeDetection->setText(QString::number(time.elapsed())); - time.start(); + ui_->label_timeDetection->setText(QString::number(time.restart())); // EXTRACT DESCRIPTORS cv::Mat descriptors; @@ -333,8 +332,7 @@ void MainWindow::update() { cvReleaseImage(&imageGrayScale); } - ui_->label_timeExtraction->setText(QString::number(time.elapsed())); - time.start(); + ui_->label_timeExtraction->setText(QString::number(time.restart())); // COMPARE int alpha = 20*255/100; @@ -344,8 +342,7 @@ void MainWindow::update() cv::Mat environment(descriptors.rows, descriptors.cols, CV_32F); descriptors.convertTo(environment, CV_32F); cv::flann::Index treeFlannIndex(environment, cv::flann::KDTreeIndexParams()); - ui_->label_timeIndexing->setText(QString::number(time.elapsed())); - time.start(); + ui_->label_timeIndexing->setText(QString::number(time.restart())); // DO NEAREST NEIGHBOR int k = 2; @@ -353,8 +350,7 @@ void MainWindow::update() cv::Mat results(dataTree_.rows, k, CV_32SC1); // results index cv::Mat dists(dataTree_.rows, k, CV_32FC1); // Distance results are CV_32FC1 treeFlannIndex.knnSearch(dataTree_, results, dists, k, cv::flann::SearchParams(emax) ); // maximum number of leafs checked - ui_->label_timeMatching->setText(QString::number(time.elapsed())); - time.start(); + ui_->label_timeMatching->setText(QString::number(time.restart())); // PROCESS RESULTS @@ -367,7 +363,7 @@ void MainWindow::update() { // Check if this descriptor matches with those of the objects // Apply NNDR - if(dists.at(i,0) <= Settings::getNN_nndrRatio().toFloat() * dists.at(i,1)) + if(dists.at(i,0) <= Settings::getNearestNeighbor_nndrRatio().toFloat() * dists.at(i,1)) { if(j>0) { @@ -468,13 +464,11 @@ void MainWindow::update() ui_->label_nfeatures->setText(QString::number(keypoints.size())); ui_->imageView_source->update(); - ui_->label_timeGui->setText(QString::number(time.elapsed())); + ui_->label_timeGui->setText(QString::number(time.restart())); cvReleaseImage(&cvImage); } } ui_->label_detectorDescriptorType->setText(QString("%1/%2").arg(Settings::currentDetectorType()).arg(Settings::currentDescriptorType())); - ui_->label_timeRefreshRate->setText(QString("(%1 Hz - %2 Hz)").arg(QString::number(1000/cameraTimer_.interval())).arg(QString::number(int(1000.0f/(float)(updateRate_.elapsed()) + 1)))); - //printf("GUI refresh rate %f Hz\n", 1000.0f/(float)(updateRate_.elapsed())); - updateRate_.start(); + ui_->label_timeRefreshRate->setText(QString("(%1 Hz - %2 Hz)").arg(QString::number(1000/cameraTimer_.interval())).arg(QString::number(int(1000.0f/(float)(updateRate_.restart()) + 1)))); } diff --git a/src/MainWindow.h b/src/MainWindow.h index ce8a0add..7ab2b367 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -13,7 +13,7 @@ #include class Ui_mainWindow; -class Object; +class ObjWidget; class Camera; class ParametersToolBox; class QLabel; @@ -37,15 +37,15 @@ private slots: void saveObjects(); void update(); void updateData(); - void removeObject(Object * object); + void removeObject(ObjWidget * object); private: - void showObject(Object * obj); + void showObject(ObjWidget * obj); private: Ui_mainWindow * ui_; Camera * camera_; - QList objects_; + QList objects_; QTimer cameraTimer_; cv::Mat dataTree_; QList dataRange_; diff --git a/src/Object.cpp b/src/ObjWidget.cpp similarity index 86% rename from src/Object.cpp rename to src/ObjWidget.cpp index 607f45a7..f0252d36 100644 --- a/src/Object.cpp +++ b/src/ObjWidget.cpp @@ -13,7 +13,7 @@ * Author: matlab */ -#include "Object.h" +#include "ObjWidget.h" #include "KeypointItem.h" #include "qtipl.h" #include "Settings.h" @@ -35,7 +35,7 @@ #include -Object::Object(QWidget * parent) : +ObjWidget::ObjWidget(QWidget * parent) : QWidget(parent), iplImage_(0), graphicsView_(0), @@ -46,7 +46,7 @@ Object::Object(QWidget * parent) : { setupUi(); } -Object::Object(int id, +ObjWidget::ObjWidget(int id, const std::vector & keypoints, const cv::Mat & descriptors, const IplImage * iplImage, @@ -64,7 +64,7 @@ Object::Object(int id, setupUi(); this->setData(keypoints, descriptors, iplImage); } -Object::~Object() +ObjWidget::~ObjWidget() { if(iplImage_) { @@ -72,14 +72,14 @@ Object::~Object() } } -void Object::setupUi() +void ObjWidget::setupUi() { graphicsView_ = new QGraphicsView(this); graphicsView_->setVisible(true); graphicsView_->setTransformationAnchor(QGraphicsView::AnchorUnderMouse); graphicsView_->setScene(new QGraphicsScene(graphicsView_)); - this->setLayout(new QVBoxLayout(graphicsView_)); + this->setLayout(new QVBoxLayout(this)); this->layout()->addWidget(graphicsView_); this->layout()->setContentsMargins(0,0,0,0); @@ -110,7 +110,7 @@ void Object::setupUi() connect(graphicsView_->scene(), SIGNAL(selectionChanged()), this, SIGNAL(selectionChanged())); } -void Object::setId(int id) +void ObjWidget::setId(int id) { id_=id; if(id_) @@ -119,7 +119,7 @@ void Object::setId(int id) } } -void Object::setGraphicsViewMode(bool on) +void ObjWidget::setGraphicsViewMode(bool on) { graphicsViewMode_ = on; graphicsView_->setVisible(on); @@ -143,7 +143,7 @@ void Object::setGraphicsViewMode(bool on) this->update(); } -void Object::setData(const std::vector & keypoints, const cv::Mat & descriptors, const IplImage * image) +void ObjWidget::setData(const std::vector & keypoints, const cv::Mat & descriptors, const IplImage * image) { keypoints_ = keypoints; descriptors_ = descriptors; @@ -175,7 +175,7 @@ void Object::setData(const std::vector & keypoints, const cv::Mat } } -void Object::resetKptsColor() +void ObjWidget::resetKptsColor() { for(int i=0; iscene()->addItem(rect); rectItems_.append(rect); } -QList Object::selectedItems() const +QList ObjWidget::selectedItems() const { return graphicsView_->scene()->selectedItems(); } -bool Object::isImageShown() const +bool ObjWidget::isImageShown() const { return _showImage->isChecked(); } -bool Object::isFeaturesShown() const +bool ObjWidget::isFeaturesShown() const { return _showFeatures->isChecked(); } -bool Object::isMirrorView() const +bool ObjWidget::isMirrorView() const { return _mirrorView->isChecked(); } -void Object::setDeletable(bool deletable) +void ObjWidget::setDeletable(bool deletable) { _delete->setEnabled(deletable); } -void Object::save(QDataStream & streamPtr) const +void ObjWidget::save(QDataStream & streamPtr) const { streamPtr << id_ << detectorType_ << descriptorType_; streamPtr << (int)keypoints_.size(); @@ -259,7 +259,7 @@ void Object::save(QDataStream & streamPtr) const streamPtr << image_; } -void Object::load(QDataStream & streamPtr) +void ObjWidget::load(QDataStream & streamPtr) { std::vector kpts; cv::Mat descriptors; @@ -291,7 +291,7 @@ void Object::load(QDataStream & streamPtr) this->setMinimumSize(image_.size()); } -void Object::paintEvent(QPaintEvent *event) +void ObjWidget::paintEvent(QPaintEvent *event) { if(graphicsViewMode_) { @@ -367,16 +367,16 @@ void Object::paintEvent(QPaintEvent *event) } } -void Object::resizeEvent(QResizeEvent* event) +void ObjWidget::resizeEvent(QResizeEvent* event) { + QWidget::resizeEvent(event); if(graphicsViewMode_) { graphicsView_->fitInView(graphicsView_->sceneRect(), Qt::KeepAspectRatio); } - QWidget::resizeEvent(event); } -void Object::contextMenuEvent(QContextMenuEvent * event) +void ObjWidget::contextMenuEvent(QContextMenuEvent * event) { QAction * action = _menu->exec(event->globalPos()); if(action == _saveImage) @@ -431,7 +431,7 @@ void Object::contextMenuEvent(QContextMenuEvent * event) QWidget::contextMenuEvent(event); } -QPixmap Object::getSceneAsPixmap() +QPixmap ObjWidget::getSceneAsPixmap() { if(graphicsViewMode_) { @@ -446,7 +446,7 @@ QPixmap Object::getSceneAsPixmap() } } -void Object::updateItemsShown() +void ObjWidget::updateItemsShown() { QList items = graphicsView_->scene()->items(); for(int i=0; i items; KeypointItem * item = 0; @@ -499,13 +499,13 @@ void Object::drawKeypoints(QPainter * painter) } } -QColor Object::defaultColor() const +QColor ObjWidget::defaultColor() const { int alpha = 20*255/100; return QColor(255, 255, 0, alpha); } -std::vector Object::selectedKeypoints() const +std::vector ObjWidget::selectedKeypoints() const { std::vector selected; if(graphicsViewMode_) @@ -522,20 +522,23 @@ std::vector Object::selectedKeypoints() const return selected; } -void Object::setupGraphicsView() +void ObjWidget::setupGraphicsView() { graphicsView_->scene()->clear(); - graphicsView_->scene()->setSceneRect(image_.rect()); - QList items; - if(image_.width() > 0 && image_.height() > 0) + if(!image_.isNull()) { - QRectF sceneRect = graphicsView_->sceneRect(); + graphicsView_->scene()->setSceneRect(image_.rect()); + QList items; + if(image_.width() > 0 && image_.height() > 0) + { + QRectF sceneRect = graphicsView_->sceneRect(); - QGraphicsPixmapItem * pixmapItem = graphicsView_->scene()->addPixmap(image_); - pixmapItem->setVisible(this->isImageShown()); - this->drawKeypoints(); + QGraphicsPixmapItem * pixmapItem = graphicsView_->scene()->addPixmap(image_); + pixmapItem->setVisible(this->isImageShown()); + this->drawKeypoints(); - graphicsView_->fitInView(sceneRect, Qt::KeepAspectRatio); + graphicsView_->fitInView(sceneRect, Qt::KeepAspectRatio); + } } } diff --git a/src/Object.h b/src/ObjWidget.h similarity index 91% rename from src/Object.h rename to src/ObjWidget.h index ced37db5..846da346 100644 --- a/src/Object.h +++ b/src/ObjWidget.h @@ -1,12 +1,12 @@ /* - * VisualObject.h + * ObjWidget.h * * Created on: 2011-10-21 * Author: matlab */ -#ifndef OBJECT_H_ -#define OBJECT_H_ +#ifndef OBJWIDGET_H_ +#define OBJWIDGET_H_ #include #include @@ -20,20 +20,20 @@ class QGraphicsScene; class QGraphicsRectItem; class QGraphicsItem; -class Object : public QWidget +class ObjWidget : public QWidget { Q_OBJECT public: - Object(QWidget * parent = 0); - Object(int id, + ObjWidget(QWidget * parent = 0); + ObjWidget(int id, const std::vector & keypoints, const cv::Mat & descriptors, const IplImage * image, const QString & detectorType = "NA", const QString & descriptorType = "NA", QWidget * parent = 0); - virtual ~Object(); + virtual ~ObjWidget(); void setId(int id); void setData(const std::vector & keypoints, @@ -71,7 +71,7 @@ protected: virtual void resizeEvent(QResizeEvent* event); signals: - void removalTriggered(Object *); + void removalTriggered(ObjWidget *); void selectionChanged(); private: @@ -106,4 +106,4 @@ private: }; -#endif /* OBJECT_H_ */ +#endif /* OBJWIDGET_H_ */ diff --git a/src/Settings.h b/src/Settings.h index 503b7b02..1c91bf52 100644 --- a/src/Settings.h +++ b/src/Settings.h @@ -106,7 +106,7 @@ class Settings PARAMETER(Surf, upright, bool, false); PARAMETER(Surf, extended, bool, false); - PARAMETER(NN, nndrRatio, float, 0.8f); // NNDR RATIO + PARAMETER(NearestNeighbor, nndrRatio, float, 0.8f); // NNDR RATIO PARAMETER(General, nextObjID, unsigned int, 1); diff --git a/src/ui/addObjectDialog.ui b/src/ui/addObjectDialog.ui index 053606ac..9164670a 100644 --- a/src/ui/addObjectDialog.ui +++ b/src/ui/addObjectDialog.ui @@ -24,10 +24,10 @@ - + - + @@ -80,9 +80,9 @@ - Object + ObjWidget QWidget -
Object.h
+
ObjWidget.h
1
diff --git a/src/ui/mainWindow.ui b/src/ui/mainWindow.ui index 29ec4196..36277721 100644 --- a/src/ui/mainWindow.ui +++ b/src/ui/mainWindow.ui @@ -116,7 +116,7 @@ 0 - + @@ -433,9 +433,9 @@ - Object + ObjWidget QWidget -
Object.h
+
ObjWidget.h
1