auto add undistorted filter to pipeline after calibration

This commit is contained in:
Steffen Vogel 2015-01-29 14:28:45 +01:00
parent de953d0a6d
commit e36e8e8a0e
4 changed files with 42 additions and 17 deletions

View file

@ -95,12 +95,26 @@ Qt::ItemFlags FilterList::flags(const QModelIndex &index) const
return flags;
}
void FilterList::add(Filter *filter)
void FilterList::append(Filter *filter)
{
beginInsertRows(QModelIndex(), size(), size());
push_back(filter);
QList<Filter*>::append(filter);
endInsertRows();
add(filter);
}
void FilterList::prepend(Filter *filter)
{
beginInsertRows(QModelIndex(), size(), size());
QList<Filter*>::prepend(filter);
endInsertRows();
add(filter);
}
void FilterList::add(Filter *filter)
{
connect(filter, SIGNAL(filterChanged(Filter *)), this, SIGNAL(filterChanged(Filter *)));
connect(filter, SIGNAL(filterApplied(Filter*)), this, SLOT(update(Filter *)));

View file

@ -23,7 +23,8 @@ class FilterList :
Qt::ItemFlags flags(const QModelIndex & index) const;
bool setData(const QModelIndex &index, const QVariant &value, int role);
void add(Filter *filter);
void prepend(Filter *filter);
void append(Filter *filter);
Filter * getCurrent();
@ -38,6 +39,9 @@ class FilterList :
void filterSelected(Filter *filter);
void filterAdded(Filter *filter);
void filterRemoved(Filter *filter);
protected:
void add(Filter *filter);
};
#endif // FILTERLIST_H

View file

@ -40,17 +40,17 @@ int main(int argc, char *argv[])
PadFilter *filter = new PadFilter(pads);
PathPlanner *planner = new PathPlanner(filter, PathPlanner::REPETETIVE_NEAREST_NEIGHBOUR);
filters->add(pattern);
filters->add(new Perspective(cam, pattern));
filters->add(new Resize(Range<int>(400, 1000)));
filters->add(new Blur(Blur::GAUSSIAN, Size(3, 3)));
filters->add(new KMeans(4));
filters->add(new Convert(COLOR_BGR2GRAY));
filters->add(new Threshold(Threshold::OTSU));
filters->add(new Morph(MORPH_CLOSE, MORPH_RECT));
filters->add(pads);
filters->add(filter);
filters->add(planner);
filters->append(pattern);
filters->append(new Perspective(cam, pattern));
filters->append(new Resize(Range<int>(400, 1000)));
filters->append(new Blur(Blur::GAUSSIAN, Size(3, 3)));
filters->append(new KMeans(4));
filters->append(new Convert(COLOR_BGR2GRAY));
filters->append(new Threshold(Threshold::OTSU));
filters->append(new Morph(MORPH_CLOSE, MORPH_RECT));
filters->append(pads);
filters->append(filter);
filters->append(planner);
robot = new Robot(pattern, planner);
mwindow = new MainWindow;

View file

@ -1,6 +1,7 @@
#include <opencv2/core.hpp>
#include "filters/pattern.h"
#include "filters/undistort.h"
#include "mainwindow.h"
#include "imagelist.h"
#include "tabcalibration.h"
@ -39,11 +40,17 @@ void TabCalibration::doCalibration()
Size size = Size(ui->spinBoardSizeX->value(), ui->spinBoardSizeY->value());
Pattern *pattern = new Pattern(size, spacing, Pattern::Type(index));
Undistort *undistort = new Undistort(cam);
filters->add(pattern);
if (cam->calibrate(images->getSelected(), pattern))
if (cam->calibrate(images->getSelected(), pattern)) {
filters->prepend(pattern);
filters->prepend(undistort);
showResults();
}
else {
delete pattern;
delete undistort;
}
}
void TabCalibration::resetCalibration()