diff --git a/src/cameras.cpp b/src/cameras.cpp index 682aaa9..15e7e85 100644 --- a/src/cameras.cpp +++ b/src/cameras.cpp @@ -238,6 +238,14 @@ void Cameras::imageRecived(Camera::Image img) } } +void Cameras::setSetup(const std::vector& setups) +{ + for(auto& camera : cameras_) + for(auto& setup : setups) + if(camera->id() == setup.id) + camera->cam()->setBayerMode(setup.bayerMode); +} + void Cameras::store(QSettings &settings) { std::vector available = cam::Camera::getAvailableCameras(); diff --git a/src/cameras.h b/src/cameras.h index b26258a..a9e04c8 100644 --- a/src/cameras.h +++ b/src/cameras.h @@ -57,6 +57,7 @@ public: ~Cameras(); bool setCameras(const std::vector& descriptions); bool addCamera(const cam::Camera::Description& desc); + void setSetup(const std::vector& setups); std::vector getCameras(); std::shared_ptr getCamera(size_t id); size_t numCameras(){return cameras_.size();} diff --git a/src/imagepipeline.cpp b/src/imagepipeline.cpp index 3932b23..197bc20 100644 --- a/src/imagepipeline.cpp +++ b/src/imagepipeline.cpp @@ -128,6 +128,7 @@ void ImagePipeline::setProfile(const Profile& profile) profile_ = profile; cameras_->setExposureTime(profile_.exposureTime); cameras_->setLighting(profile_.lighting); + cameras_->setSetup(profile_.cameras); qDebug()<<"setting profile "<>remapMap.xMat; matf[("_"+QString::number(id)+"_ymat").toStdString()]>>remapMap.yMat; matf[("_"+QString::number(id)+"_origin").toStdString()]>>remapMap.topLeftCoordinate; + matf[("_"+QString::number(id)+"_bayermode").toStdString()]>>bayerMode; } else { diff --git a/src/profile.h b/src/profile.h index b8c3999..3b73a10 100644 --- a/src/profile.h +++ b/src/profile.h @@ -5,6 +5,7 @@ #include #include #include +#include #include #include "camera.h" @@ -16,6 +17,7 @@ public: RemapMap remapMap; cv::Mat darkmap; cv::Mat bgmask; + cam::Camera::BayerMode bayerMode = cam::Camera::BAYER_BLUE; void store(const QString& filename) const; void load(const QString& name, size_t cameraId); }; diff --git a/src/ui/configurecameradialog.cpp b/src/ui/configurecameradialog.cpp index 0f8a4fc..4a905b4 100644 --- a/src/ui/configurecameradialog.cpp +++ b/src/ui/configurecameradialog.cpp @@ -21,6 +21,29 @@ ConfigureCameraDialog::ConfigureCameraDialog(const CameraSetup& setup, std::shar ui->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); @@ -37,6 +60,7 @@ ConfigureCameraDialog::ConfigureCameraDialog(const CameraSetup& setup, std::shar 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(); } @@ -54,6 +78,32 @@ void ConfigureCameraDialog::setExposure(double value) qDebug()<<"set exposure to "<cam()->setBayerMode(setup_.bayerMode); + qDebug()<<"set bayer mode to "<widget_4->setImage(Camera::Image(setup_.bgmask, camera_->id())); fgImage.release(); - mode_ = MODE_IDLE; } break; case MODE_DARK_GET: + mode_ = MODE_IDLE; setup_.darkmap = img.mat; ui->widget_4->setImage(Camera::Image(setup_.darkmap, camera_->id())); - mode_ = MODE_IDLE; break; case MODE_REMAP_GET: + mode_ = MODE_IDLE; cv::Mat masked; if(setup_.bgmask.data) img.mat.copyTo(masked, setup_.bgmask); @@ -93,7 +144,6 @@ void ConfigureCameraDialog::gotImage(Camera::Image img) if(points.size() < 8) { QMessageBox::warning(this, "Failed", "Error creating map, insufficant points detected."); - mode_ = MODE_IDLE; break; } RemapMap map; @@ -104,7 +154,6 @@ void ConfigureCameraDialog::gotImage(Camera::Image img) 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())); - mode_ = MODE_IDLE; break; } checkConfig(); diff --git a/src/ui/configurecameradialog.h b/src/ui/configurecameradialog.h index 1566b7d..0b780af 100644 --- a/src/ui/configurecameradialog.h +++ b/src/ui/configurecameradialog.h @@ -34,6 +34,7 @@ private slots: void captureDark(); void takeImage(); void setExposure(double value); + void bayerIndexChanged(int index); public slots: void accept() override; diff --git a/src/ui/configurecameradialog.ui b/src/ui/configurecameradialog.ui index e99dc1d..f464788 100644 --- a/src/ui/configurecameradialog.ui +++ b/src/ui/configurecameradialog.ui @@ -13,7 +13,7 @@ Configure Camera - + @@ -31,6 +31,16 @@ 6 + + + + false + + + Clear + + + @@ -47,20 +57,6 @@ - - - - Create - - - - - - - Dark image - - - @@ -71,73 +67,6 @@ - - - - Create - - - - - - - false - - - Clear - - - - - - - Background image - - - - - - - false - - - Show - - - - - - - - 0 - 0 - - - - - 40 - 40 - - - - - - - - false - - - Show - - - - - - - Create - - - @@ -154,6 +83,44 @@ + + + + Background image + + + + + + + Create + + + + + + + Create + + + + + + + Dark image + + + + + + + false + + + Show + + + @@ -161,6 +128,39 @@ + + + + Create + + + + + + + + 0 + 0 + + + + + 40 + 40 + + + + + + + + false + + + Show + + + @@ -173,6 +173,49 @@ + + + + 0 + + + + + Bayer mode + + + + + + + + Blue + + + + + Green + + + + + Red + + + + + Passthrough + + + + + Debayer + + + + + +