#include "configurecameradialog.h" #include "ui_configurecameradialog.h" #include #include #include #include #include #include #include ConfigureCameraDialog::ConfigureCameraDialog(const CameraSetup& setup, std::shared_ptr camera, double exposureTime, QWidget *parent): QDialog(parent), setup_(setup), camera_(camera), profileExposure_(exposureTime), ui(new Ui::ConfigureCameraDialog) { ui->setupUi(this); qDebug()<<"profileExposure_"<doubleSpinBox->setValue(profileExposure_); setExposure(profileExposure_); switch(setup.bayerMode) { case cam::Camera::BAYER_BLUE: ui->comboBox_bayer->setCurrentIndex(0); break; case cam::Camera::BAYER_GREEN: ui->comboBox_bayer->setCurrentIndex(1); break; case cam::Camera::BAYER_RED: ui->comboBox_bayer->setCurrentIndex(2); break; case cam::Camera::BAYER_PASSTHOUGH: ui->comboBox_bayer->setCurrentIndex(3); break; case cam::Camera::BAYER_DEBAYER: ui->comboBox_bayer->setCurrentIndex(4); break; default: break; } camera_->cam()->setBayerMode(setup_.bayerMode); uint64_t min, max; camera_->cam()->getExposureTimeLimits(min, max); ui->doubleSpinBox->setMaximum(max/1000000.0); ui->doubleSpinBox->setMinimum(min/1000000.0); connect(ui->doubleSpinBox, QOverload::of(&QDoubleSpinBox::valueChanged), this, &ConfigureCameraDialog::setExposure); 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); connect(ui->pushButtonBgShow, &QPushButton::clicked, [this](){if(setup_.bgmask.data) ui->widget_4->setImage(Camera::Image(setup_.bgmask, 0));}); connect(ui->pushButtonDarkImageShow, &QPushButton::clicked, [this](){if(setup_.darkmap.data) ui->widget_4->setImage(Camera::Image(setup_.darkmap, 0));}); connect(ui->comboBox_bayer, QOverload::of(&QComboBox::currentIndexChanged), this, &ConfigureCameraDialog::bayerIndexChanged); checkConfig(); } ConfigureCameraDialog::~ConfigureCameraDialog() { delete ui; } void ConfigureCameraDialog::setExposure(double value) { if(!camera_->cam()->setExposureTime(value*1000000.0)) QMessageBox::warning(this, "Warning", "Failed to set exposure"); else qDebug()<<"set exposure to "<cam()->setBayerMode(setup_.bayerMode); qDebug()<<"set bayer mode to "<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 { mode_ = MODE_IDLE; 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(); } break; case MODE_DARK_GET: mode_ = MODE_IDLE; setup_.darkmap = img.mat; ui->widget_4->setImage(Camera::Image(setup_.darkmap, camera_->id())); break; case MODE_REMAP_GET: mode_ = MODE_IDLE; cv::Mat masked; if(setup_.bgmask.data) img.mat.copyTo(masked, setup_.bgmask); else masked = img.mat; std::vector points = detectCharucoPoints(img.mat, false); if(points.size() < 8) { QMessageBox::warning(this, "Failed", "Error creating map, insufficant points detected."); break; } RemapMap map; if(createRemapMap(masked, 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, img.mat.cols/50, cv::Scalar(255,255,255), img.mat.cols/200); ui->widget_4->setImage(Camera::Image(img.mat, camera_->id())); 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; ui->doubleSpinBox->setValue(profileExposure_); setExposure(profileExposure_); takeImage(); } void ConfigureCameraDialog::accept() { if(checkConfig()) QDialog::accept(); else QMessageBox::information(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->pushButtonDarkImageShow->setEnabled(darkMapOK); ui->pushButtonBgShow->setEnabled(bgOk); ui->ledBg->setLit(bgOk); ui->ledDark->setLit(darkMapOK); ui->ledRemap->setLit(remapMapOk); return remapMapOk; }