Added "Sized features" action

Added "Set alpha" action

git-svn-id: http://find-object.googlecode.com/svn/trunk/find_object@26 620bd6b2-0a58-f614-fd9a-1bd335dccda9
This commit is contained in:
matlabbe 2011-11-18 16:09:23 +00:00
parent c7d285ae2e
commit 91c2ac1f04
2 changed files with 87 additions and 9 deletions

View File

@ -30,6 +30,7 @@
#include <QtGui/QGraphicsScene> #include <QtGui/QGraphicsScene>
#include <QtGui/QVBoxLayout> #include <QtGui/QVBoxLayout>
#include <QtGui/QGraphicsRectItem> #include <QtGui/QGraphicsRectItem>
#include <QtGui/QInputDialog>
#include <QtCore/QDir> #include <QtCore/QDir>
@ -42,7 +43,8 @@ ObjWidget::ObjWidget(QWidget * parent) :
id_(0), id_(0),
detectorType_("NA"), detectorType_("NA"),
descriptorType_("NA"), descriptorType_("NA"),
graphicsViewInitialized_(false) graphicsViewInitialized_(false),
alpha_(50)
{ {
setupUi(); setupUi();
} }
@ -59,7 +61,8 @@ ObjWidget::ObjWidget(int id,
id_(id), id_(id),
detectorType_(detectorType), detectorType_(detectorType),
descriptorType_(descriptorType), descriptorType_(descriptorType),
graphicsViewInitialized_(false) graphicsViewInitialized_(false),
alpha_(50)
{ {
setupUi(); setupUi();
this->setData(keypoints, descriptors, iplImage); this->setData(keypoints, descriptors, iplImage);
@ -100,6 +103,11 @@ void ObjWidget::setupUi()
_autoScale->setCheckable(true); _autoScale->setCheckable(true);
_autoScale->setChecked(true); _autoScale->setChecked(true);
_autoScale->setEnabled(false); _autoScale->setEnabled(false);
_sizedFeatures = _menu->addAction(tr("Sized features"));
_sizedFeatures->setCheckable(true);
_sizedFeatures->setChecked(false);
_menu->addSeparator();
_setAlpha = _menu->addAction(tr("Set alpha..."));
_menu->addSeparator(); _menu->addSeparator();
_saveImage = _menu->addAction(tr("Save picture...")); _saveImage = _menu->addAction(tr("Save picture..."));
_menu->addSeparator(); _menu->addSeparator();
@ -169,6 +177,49 @@ void ObjWidget::setAutoScale(bool autoScale)
} }
} }
void ObjWidget::setSizedFeatures(bool on)
{
_sizedFeatures->setChecked(on);
if(graphicsViewInitialized_)
{
for(unsigned int i=0; i<keypointItems_.size() && i<keypoints_.size(); ++i)
{
float size = 14;
if(on && keypoints_[i].size>14.0f)
{
size = keypoints_[i].size;
}
float radius = size*1.2f/9.0f*2.0f;
keypointItems_.at(i)->setRect(keypoints_[i].pt.x-radius, keypoints_[i].pt.y-radius, radius*2, radius*2);
}
}
if(!_graphicsViewMode->isChecked())
{
this->update();
}
}
void ObjWidget::setAlpha(int alpha)
{
if(alpha>=0 && alpha<=255)
{
alpha_ = alpha;
if(graphicsViewInitialized_)
{
for(int i=0; i<keypointItems_.size() && i<kptColors_.size(); ++i)
{
QColor color = kptColors_.at(i);
color.setAlpha(alpha_);
keypointItems_.at(i)->setColor(color);
}
}
if(!_graphicsViewMode->isChecked())
{
this->update();
}
}
}
void ObjWidget::setData(const std::vector<cv::KeyPoint> & keypoints, const cv::Mat & descriptors, const IplImage * image) void ObjWidget::setData(const std::vector<cv::KeyPoint> & keypoints, const cv::Mat & descriptors, const IplImage * image)
{ {
keypoints_ = keypoints; keypoints_ = keypoints;
@ -228,6 +279,8 @@ void ObjWidget::setKptColor(unsigned int index, const QColor & color)
{ {
if(index < keypointItems_.size()) if(index < keypointItems_.size())
{ {
QColor color = color;
color.setAlpha(alpha_);
keypointItems_.at(index)->setColor(color); keypointItems_.at(index)->setColor(color);
} }
} }
@ -451,7 +504,7 @@ void ObjWidget::contextMenuEvent(QContextMenuEvent * event)
{ {
graphicsView_->fitInView(graphicsView_->sceneRect(), Qt::KeepAspectRatio); graphicsView_->fitInView(graphicsView_->sceneRect(), Qt::KeepAspectRatio);
} }
else else if(!_graphicsViewMode->isChecked())
{ {
this->update(); this->update();
} }
@ -468,6 +521,19 @@ void ObjWidget::contextMenuEvent(QContextMenuEvent * event)
{ {
this->setAutoScale(_autoScale->isChecked()); this->setAutoScale(_autoScale->isChecked());
} }
else if(action == _sizedFeatures)
{
this->setSizedFeatures(_sizedFeatures->isChecked());
}
else if(action == _setAlpha)
{
bool ok;
int newAlpha = QInputDialog::getInt(this, tr("Set alpha"), tr("Alpha:"), alpha_, 0, 255, 5, &ok);
if(ok)
{
this->setAlpha(newAlpha);
}
}
QWidget::contextMenuEvent(event); QWidget::contextMenuEvent(event);
} }
@ -511,7 +577,13 @@ void ObjWidget::drawKeypoints(QPainter * painter)
for(std::vector<cv::KeyPoint>::const_iterator iter = keypoints_.begin(); iter != keypoints_.end(); ++iter, ++i ) for(std::vector<cv::KeyPoint>::const_iterator iter = keypoints_.begin(); iter != keypoints_.end(); ++iter, ++i )
{ {
const cv::KeyPoint & r = *iter; const cv::KeyPoint & r = *iter;
float radius = 14*1.2/9.*2;//r.size*1.2/9.*2; float size = 14;
if(r.size>14.0f && _sizedFeatures->isChecked())
{
size = r.size;
}
float radius = size*1.2f/9.0f*2.0f;
QColor color(kptColors_.at(i).red(), kptColors_.at(i).green(), kptColors_.at(i).blue(), alpha_);
if(_graphicsViewMode->isChecked()) if(_graphicsViewMode->isChecked())
{ {
QString info = QString( "ID = %1\n" QString info = QString( "ID = %1\n"
@ -521,7 +593,7 @@ void ObjWidget::drawKeypoints(QPainter * painter)
"Y = %5\n" "Y = %5\n"
"Size = %6").arg(i+1).arg(r.response).arg(r.angle).arg(r.pt.x).arg(r.pt.y).arg(r.size); "Size = %6").arg(i+1).arg(r.response).arg(r.angle).arg(r.pt.x).arg(r.pt.y).arg(r.size);
// YELLOW = NEW and multiple times // YELLOW = NEW and multiple times
item = new KeypointItem(i+1, r.pt.x-radius, r.pt.y-radius, radius*2, info, kptColors_.at(i)); item = new KeypointItem(i+1, r.pt.x-radius, r.pt.y-radius, radius*2, info, color);
item->setVisible(this->isFeaturesShown()); item->setVisible(this->isFeaturesShown());
item->setZValue(1); item->setZValue(1);
graphicsView_->scene()->addItem(item); graphicsView_->scene()->addItem(item);
@ -531,8 +603,8 @@ void ObjWidget::drawKeypoints(QPainter * painter)
if(painter) if(painter)
{ {
painter->save(); painter->save();
painter->setPen(kptColors_.at(i)); painter->setPen(color);
painter->setBrush(kptColors_.at(i)); painter->setBrush(color);
painter->drawEllipse(r.pt.x-radius, r.pt.y-radius, radius*2, radius*2); painter->drawEllipse(r.pt.x-radius, r.pt.y-radius, radius*2, radius*2);
painter->restore(); painter->restore();
} }
@ -541,8 +613,9 @@ void ObjWidget::drawKeypoints(QPainter * painter)
QColor ObjWidget::defaultColor() const QColor ObjWidget::defaultColor() const
{ {
int alpha = 20*255/100; QColor color(Qt::yellow);
return QColor(255, 255, 0, alpha); color.setAlpha(alpha_);
return color;
} }
std::vector<cv::KeyPoint> ObjWidget::selectedKeypoints() const std::vector<cv::KeyPoint> ObjWidget::selectedKeypoints() const

View File

@ -43,6 +43,8 @@ public:
void setKptColor(unsigned int index, const QColor & color); void setKptColor(unsigned int index, const QColor & color);
void setGraphicsViewMode(bool on); void setGraphicsViewMode(bool on);
void setAutoScale(bool autoScale); void setAutoScale(bool autoScale);
void setSizedFeatures(bool on);
void setAlpha(int alpha);
void setDeletable(bool deletable); void setDeletable(bool deletable);
void addRect(QGraphicsRectItem * rect); void addRect(QGraphicsRectItem * rect);
@ -94,6 +96,7 @@ private:
QString descriptorType_; QString descriptorType_;
QList<QGraphicsRectItem*> rectItems_; QList<QGraphicsRectItem*> rectItems_;
bool graphicsViewInitialized_; bool graphicsViewInitialized_;
int alpha_;
// menu stuff // menu stuff
QString _savedFileName; QString _savedFileName;
@ -105,6 +108,8 @@ private:
QAction * _delete; QAction * _delete;
QAction * _graphicsViewMode; QAction * _graphicsViewMode;
QAction * _autoScale; QAction * _autoScale;
QAction * _sizedFeatures;
QAction * _setAlpha;
}; };