Finish up

This commit is contained in:
2021-06-12 15:17:35 +02:00
parent 5efbdcbd6a
commit 0c466644ce
23 changed files with 958 additions and 154 deletions

View File

@ -0,0 +1,186 @@
#include "configurecameradialog.h"
#include "ui_configurecameradialog.h"
#include <QFileDialog>
#include <QMessageBox>
#include <uvosunwrap/bgremoval.h>
#include <uvosunwrap/charuco.h>
#include <uvosunwrap/unwrap.h>
#include <opencv2/imgproc.hpp>
ConfigureCameraDialog::ConfigureCameraDialog(const CameraSetup& setup, std::shared_ptr<Camera> camera, double exposureTime, QWidget *parent):
QDialog(parent),
setup_(setup),
camera_(camera),
ui(new Ui::ConfigureCameraDialog)
{
ui->setupUi(this);
ui->doubleSpinBox->setValue(exposureTime);
connect(ui->pushButtonBgLoad, &QPushButton::clicked, this, &ConfigureCameraDialog::loadBg);
connect(ui->pushButtonRemapLoad, &QPushButton::clicked, this, &ConfigureCameraDialog::loadRemap);
connect(ui->pushButtonDarkImageLoad, &QPushButton::clicked, this, &ConfigureCameraDialog::loadDark);
connect(ui->pushButtonBgClear, &QPushButton::clicked, [this](){setup_.bgmask.release(); checkConfig();});
connect(ui->pushButtonRemapClear, &QPushButton::clicked, [this](){setup_.remapMap = RemapMap(); checkConfig();});
connect(ui->pushButtonDarkImageClear, &QPushButton::clicked, [this](){setup_.darkmap.release(); checkConfig();});
connect(ui->pushButtonBgCreate, &QPushButton::clicked, this, &ConfigureCameraDialog::captureBg);
connect(ui->pushButtonRemapCreate, &QPushButton::clicked, this, &ConfigureCameraDialog::captureRemap);
connect(ui->pushButtonDarkImageCreate, &QPushButton::clicked, this, &ConfigureCameraDialog::captureDark);
connect(ui->pushButtonCapture, &QPushButton::clicked, this, &ConfigureCameraDialog::takeImage);
connect(camera_.get(), &Camera::newImage, this, &ConfigureCameraDialog::gotImage);
checkConfig();
}
ConfigureCameraDialog::~ConfigureCameraDialog()
{
delete ui;
}
void ConfigureCameraDialog::loadBg()
{
QString filename = QFileDialog::getOpenFileName(this, tr("Open Background Mask"), CameraSetup::camerasLocation(), "OpenCV Mat (*.mat)");
if(!filename.isEmpty())
{
setup_.loadBgMask(filename);
if(!setup_.bgmask.data)
QMessageBox::warning(this, "Warning", "Could not load " + filename);
checkConfig();
}
}
void ConfigureCameraDialog::loadRemap()
{
QString filename = QFileDialog::getOpenFileName(this, tr("Open Background Mask"), CameraSetup::camerasLocation(), "OpenCV Mat (*.mat)");
if(!filename.isEmpty())
{
setup_.loadRemapMaps(filename);
if(!setup_.remapMap.xMat.data || !setup_.remapMap.yMat.data)
{
QMessageBox::warning(this, "Warning", "Could not load " + filename);
setup_.remapMap = RemapMap();
}
checkConfig();
}
}
void ConfigureCameraDialog::loadDark()
{
QString filename = QFileDialog::getOpenFileName(this, tr("Open Background Mask"), CameraSetup::camerasLocation(), "Image (*.png)");
if(!filename.isEmpty())
{
setup_.loadDarkMap(filename);
if(!setup_.darkmap.data)
QMessageBox::warning(this, "Warning", "Could not load " + filename);
checkConfig();
}
}
void ConfigureCameraDialog::gotImage(Camera::Image img)
{
switch(mode_)
{
case MODE_IDLE:
ui->widget_4->setImage(img);
break;
case MODE_BG_GET:
if(!fgImage.data)
{
QMessageBox::information(this, "Remove object", "please remove the item from the sphere");
fgImage = img.mat;
takeImage();
}
else
{
if(!createMask(img.mat, setup_.bgmask, fgImage))
QMessageBox::warning(this, "Failed", "Unable to create mask from captured images");
else
ui->widget_4->setImage(Camera::Image(setup_.bgmask, camera_->id()));
fgImage.release();
mode_ = MODE_IDLE;
}
break;
case MODE_DARK_GET:
setup_.darkmap = img.mat;
ui->widget_4->setImage(Camera::Image(setup_.darkmap, camera_->id()));
mode_ = MODE_IDLE;
break;
case MODE_REMAP_GET:
std::vector<DetectedPoint> points = detectCharucoPoints(img.mat, false);
if(points.size() < 8)
{
QMessageBox::warning(this, "Failed", "Error creating map, insufficant points detected.");
mode_ = MODE_IDLE;
break;
}
RemapMap map;
if(createRemapMap(img.mat, map, points))
setup_.remapMap = map;
else
QMessageBox::warning(this, "Failed", "Error creating map");
for(size_t i = 0; i < points.size(); ++i)
cv::circle(img.mat, points[i].point, 5, cv::Scalar(0,255,0), 1);
ui->widget_4->setImage(Camera::Image(setup_.bgmask, camera_->id()));
mode_ = MODE_IDLE;
break;
}
checkConfig();
}
void ConfigureCameraDialog::takeImage()
{
camera_->cam()->setExposureTime(ui->doubleSpinBox->value());
camera_->cam()->setAcquisitionMode(cam::Camera::MODE_SINGLE);
camera_->cam()->setTriggerMode(cam::Camera::TRIGGER_SOFTWARE);
camera_->cam()->startAcquisition();
camera_->cam()->trigger();
}
void ConfigureCameraDialog::captureBg()
{
QMessageBox::information(this, "Insert object", "Please insert Test Article A");
mode_ = MODE_BG_GET;
takeImage();
}
void ConfigureCameraDialog::captureRemap()
{
QMessageBox::information(this, "Insert object", "Please insert Test Article A.");
mode_ = MODE_REMAP_GET;
takeImage();
}
void ConfigureCameraDialog::captureDark()
{
QMessageBox::information(this, "Cover lense", "Please cover the lense of the camera.");
mode_ = MODE_DARK_GET;
takeImage();
}
void ConfigureCameraDialog::accept()
{
if(checkConfig())
QDialog::accept();
else
QMessageBox::warning(this, "Unfinished", "Can not accept unfinished camera setup");
}
bool ConfigureCameraDialog::checkConfig()
{
bool bgOk = setup_.bgmask.data;
bool remapMapOk = setup_.remapMap.xMat.data;
bool darkMapOK = setup_.darkmap.data;
ui->pushButtonBgClear->setEnabled(bgOk);
ui->pushButtonDarkImageClear->setEnabled(darkMapOK);
ui->pushButtonRemapClear->setEnabled(remapMapOk);
ui->ledBg->setLit(bgOk);
ui->ledDark->setLit(darkMapOK);
ui->ledRemap->setLit(remapMapOk);
return bgOk && remapMapOk && darkMapOK;
}