Fixed a crash (Windows) after adding an object. This may be related to issue 1. The cause is that the first image acquired from the camera is blank, so no features are extracted and the code not handled this case, crashing during nearest neighbor search.
git-svn-id: http://find-object.googlecode.com/svn/trunk/find_object@67 620bd6b2-0a58-f614-fd9a-1bd335dccda9
This commit is contained in:
parent
ba1919d2c6
commit
aafe4beac4
@ -353,8 +353,10 @@ void MainWindow::update(const cv::Mat & image)
|
||||
delete detector;
|
||||
ui_->label_timeDetection->setText(QString::number(time.restart()));
|
||||
|
||||
// EXTRACT DESCRIPTORS
|
||||
cv::Mat descriptors;
|
||||
if(keypoints.size())
|
||||
{
|
||||
// EXTRACT DESCRIPTORS
|
||||
cv::DescriptorExtractor * extractor = Settings::createDescriptorsExtractor();
|
||||
extractor->compute(img, keypoints, descriptors);
|
||||
delete extractor;
|
||||
@ -367,10 +369,15 @@ void MainWindow::update(const cv::Mat & image)
|
||||
cvReleaseImage(&imageGrayScale);
|
||||
}
|
||||
ui_->label_timeExtraction->setText(QString::number(time.restart()));
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("WARNING: no features detected !?!\n");
|
||||
ui_->label_timeExtraction->setText(QString::number(0));
|
||||
}
|
||||
|
||||
// COMPARE
|
||||
int alpha = 20*255/100;
|
||||
if(!dataTree_.empty() && (Settings::getNearestNeighbor_nndrRatioUsed() || Settings::getNearestNeighbor_minDistanceUsed()))
|
||||
if(!dataTree_.empty() && keypoints.size() && (Settings::getNearestNeighbor_nndrRatioUsed() || Settings::getNearestNeighbor_minDistanceUsed()))
|
||||
{
|
||||
// CREATE INDEX
|
||||
cv::Mat environment(descriptors.rows, descriptors.cols, CV_32F);
|
||||
@ -390,7 +397,6 @@ void MainWindow::update(const cv::Mat & image)
|
||||
treeFlannIndex.knnSearch(dataTree_, results, dists, k, cv::flann::SearchParams(emax) ); // maximum number of leafs checked
|
||||
ui_->label_timeMatching->setText(QString::number(time.restart()));
|
||||
|
||||
|
||||
// PROCESS RESULTS
|
||||
if(this->isVisible())
|
||||
{
|
||||
@ -406,7 +412,6 @@ void MainWindow::update(const cv::Mat & image)
|
||||
for(int i=0; i<dataTree_.rows; ++i)
|
||||
{
|
||||
QColor color((Qt::GlobalColor)(j % 12 + 7 ));
|
||||
color.setAlpha(alpha);
|
||||
bool matched = false;
|
||||
// Check if this descriptor matches with those of the objects
|
||||
if(Settings::getNearestNeighbor_nndrRatioUsed() &&
|
||||
@ -497,7 +502,7 @@ void MainWindow::update(const cv::Mat & image)
|
||||
}
|
||||
else
|
||||
{
|
||||
objects_.at(j)->setKptColor(indexes_1.at(k), QColor(0,0,0,alpha));
|
||||
objects_.at(j)->setKptColor(indexes_1.at(k), QColor(0,0,0));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -20,6 +20,7 @@
|
||||
#include <QtGui/QVBoxLayout>
|
||||
#include <QtGui/QGraphicsRectItem>
|
||||
#include <QtGui/QInputDialog>
|
||||
#include <QtGui/QPen>
|
||||
|
||||
#include <QtCore/QDir>
|
||||
|
||||
@ -201,6 +202,14 @@ void ObjWidget::setAlpha(int alpha)
|
||||
color.setAlpha(alpha_);
|
||||
keypointItems_.at(i)->setColor(color);
|
||||
}
|
||||
for(int i=0; i<rectItems_.size(); ++i)
|
||||
{
|
||||
QPen pen = rectItems_.at(i)->pen();
|
||||
QColor color = pen.color();
|
||||
color.setAlpha(alpha_);
|
||||
pen.setColor(color);
|
||||
rectItems_.at(i)->setPen(pen);
|
||||
}
|
||||
}
|
||||
if(!_graphicsViewMode->isChecked())
|
||||
{
|
||||
@ -282,6 +291,11 @@ void ObjWidget::addRect(QGraphicsRectItem * rect)
|
||||
graphicsView_->scene()->addItem(rect);
|
||||
}
|
||||
rect->setZValue(2);
|
||||
QPen pen = rect->pen();
|
||||
QColor color = pen.color();
|
||||
color.setAlpha(alpha_);
|
||||
pen.setColor(color);
|
||||
rect->setPen(pen);
|
||||
rectItems_.append(rect);
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user