diff --git a/include/find_object/ObjWidget.h b/include/find_object/ObjWidget.h index 384052af..f81b664f 100644 --- a/include/find_object/ObjWidget.h +++ b/include/find_object/ObjWidget.h @@ -47,6 +47,7 @@ public: void clearRoiSelection() {mousePressedPos_ = mouseCurrentPos_ = QPoint();update();} int id() const {return id_;} + const QColor & color() const {return color_;} const std::vector keypoints() const {return keypoints_;} const QPixmap & pixmap() const {return pixmap_;} QColor defaultColor() const; @@ -91,6 +92,7 @@ private: bool graphicsViewInitialized_; int alpha_; QLabel * label_; + QColor color_; // menu stuff QString savedFileName_; @@ -104,6 +106,7 @@ private: QAction * autoScale_; QAction * sizedFeatures_; QAction * setAlpha_; + QAction * setColor_; // selection stuff QPoint mousePressedPos_; diff --git a/src/FindObject.cpp b/src/FindObject.cpp index 25169e29..1f3d0905 100644 --- a/src/FindObject.cpp +++ b/src/FindObject.cpp @@ -663,6 +663,7 @@ bool FindObject::detect(const cv::Mat & image, QMultiMapdetect(grayscaleImg, sceneKeypoints_); timeStamps_.insert(kTimeKeypointDetection, time.restart()); + bool emptyScene = sceneKeypoints_.size() == 0; if(sceneKeypoints_.size()) { int maxFeatures = Settings::getFeature2D_3MaxFeatures(); @@ -678,10 +679,6 @@ bool FindObject::detect(const cv::Mat & image, QMultiMapsize()!=0 && vocabulary_->wordToObjects().begin().value()!=-1 && Settings::getGeneral_invertedSearch()) || @@ -938,6 +935,12 @@ bool FindObject::detect(const cv::Mat & image, QMultiMap::const_iterator iter = jter.value().constBegin(); iter!= jter.value().constEnd(); ++iter) { - obj->setKptColor(iter.key(), color); - ui_->imageView_source->setKptColor(iter.value(), color); + obj->setKptColor(iter.key(), obj->color()); + ui_->imageView_source->setKptColor(iter.value(), obj->color()); } } else if(!objectsDetected.contains(id)) @@ -992,14 +990,11 @@ void MainWindow::update(const cv::Mat & image) Q_ASSERT(obj != 0); // COLORIZE (should be done in the GUI thread) - int nColor = id % 11 + 7; - QColor color((Qt::GlobalColor)(nColor==Qt::yellow?Qt::gray:nColor)); - QTransform hTransform = iter.value().second; QRect rect = obj->pixmap().rect(); // add rectangle - QPen rectPen(color); + QPen rectPen(obj->color()); rectPen.setWidth(Settings::getHomography_rectBorderWidth()); RectItem * rectItemScene = new RectItem(id, rect); connect(rectItemScene, SIGNAL(hovered(int)), this, SLOT(rectHovered(int))); @@ -1013,8 +1008,8 @@ void MainWindow::update(const cv::Mat & image) for(QMultiMap::const_iterator iter = inliersIter.value().constBegin(); iter!= inliersIter.value().constEnd(); ++iter) { - obj->setKptColor(iter.key(), color); - ui_->imageView_source->setKptColor(iter.value(), color); + obj->setKptColor(iter.key(), obj->color()); + ui_->imageView_source->setKptColor(iter.value(), obj->color()); } QLabel * label = ui_->dockWidget_objects->findChild(QString("%1detection").arg(id)); diff --git a/src/ObjWidget.cpp b/src/ObjWidget.cpp index f7f7f886..baced542 100644 --- a/src/ObjWidget.cpp +++ b/src/ObjWidget.cpp @@ -24,6 +24,7 @@ #include #include #include +#include #include @@ -34,7 +35,8 @@ ObjWidget::ObjWidget(QWidget * parent) : id_(0), graphicsView_(0), graphicsViewInitialized_(false), - alpha_(100) + alpha_(100), + color_(Qt::red) { setupUi(); } @@ -43,7 +45,8 @@ ObjWidget::ObjWidget(int id, const std::vector & keypoints, const id_(id), graphicsView_(0), graphicsViewInitialized_(false), - alpha_(100) + alpha_(100), + color_(QColor((Qt::GlobalColor)((id % 11 + 7)==Qt::yellow?Qt::gray:(id % 11 + 7)))) { setupUi(); this->setData(keypoints, image); @@ -89,6 +92,7 @@ void ObjWidget::setupUi() sizedFeatures_->setCheckable(true); sizedFeatures_->setChecked(false); menu_->addSeparator(); + setColor_ = menu_->addAction(tr("Set color...")); setAlpha_ = menu_->addAction(tr("Set alpha...")); menu_->addSeparator(); saveImage_ = menu_->addAction(tr("Save picture...")); @@ -106,6 +110,7 @@ void ObjWidget::setupUi() void ObjWidget::setId(int id) { + color_ = QColor((Qt::GlobalColor)((id % 11 + 7)==Qt::yellow?Qt::gray:(id % 11 + 7))); id_=id; if(id_) { @@ -575,6 +580,35 @@ void ObjWidget::contextMenuEvent(QContextMenuEvent * event) { this->setSizedFeatures(sizedFeatures_->isChecked()); } + else if(action == setColor_) + { + QColor color = QColorDialog::getColor(color_, this); + if(color.isValid()) + { + for(int i=0; iisChecked()) + { + keypointItems_[i]->setColor(color); + } + } + } + for(int i=0; ipen().color() == color_) + { + QPen p = rectItems_[i]->pen(); + p.setColor(color); + rectItems_[i]->setPen(p); + } + } + color_ = color; + + } + } else if(action == setAlpha_) { bool ok;