From a9f263b22d9ab92079712372b4677b0b34cad659 Mon Sep 17 00:00:00 2001 From: uvos Date: Mon, 19 Jul 2021 11:12:23 +0200 Subject: [PATCH] Change lighting length to be based on when cameras report finished Fix viewer handling when cammeras are available --- MAClient.desktop | 4 +-- src/cameras.cpp | 10 +++++- src/imagepipeline.cpp | 17 +++++++++ src/imagepipeline.h | 1 + src/main.cpp | 70 ++++++++++++++++++++----------------- src/regessioncalculator.cpp | 0 src/regessioncalculator.h | 0 src/ui/aboutdiag.cpp | 0 src/ui/aboutdiag.h | 0 src/ui/aboutdiag.ui | 0 src/ui/cvimageviewer.cpp | 1 + src/ui/plot.cpp | 0 src/ui/plot.h | 0 src/ui/regressiondiag.cpp | 0 src/ui/regressiondiag.h | 0 src/ui/regressiondiag.ui | 0 src/ui/statisticsdialog.cpp | 0 src/ui/statisticsdialog.h | 0 src/ui/statisticsdialog.ui | 0 src/utilites.cpp | 0 src/utilites.h | 0 21 files changed, 67 insertions(+), 36 deletions(-) mode change 100755 => 100644 src/regessioncalculator.cpp mode change 100755 => 100644 src/regessioncalculator.h mode change 100755 => 100644 src/ui/aboutdiag.cpp mode change 100755 => 100644 src/ui/aboutdiag.h mode change 100755 => 100644 src/ui/aboutdiag.ui mode change 100755 => 100644 src/ui/plot.cpp mode change 100755 => 100644 src/ui/plot.h mode change 100755 => 100644 src/ui/regressiondiag.cpp mode change 100755 => 100644 src/ui/regressiondiag.h mode change 100755 => 100644 src/ui/regressiondiag.ui mode change 100755 => 100644 src/ui/statisticsdialog.cpp mode change 100755 => 100644 src/ui/statisticsdialog.h mode change 100755 => 100644 src/ui/statisticsdialog.ui mode change 100755 => 100644 src/utilites.cpp mode change 100755 => 100644 src/utilites.h diff --git a/MAClient.desktop b/MAClient.desktop index 1fc181f..397e5d7 100644 --- a/MAClient.desktop +++ b/MAClient.desktop @@ -6,9 +6,9 @@ Version=1.0 # The name of the application Name=Lubricant Thickness Detector # A comment which can/will be used as a tooltip -Comment=MAClient -sd 0 -t 30 +Comment=MAClient # The executable of the application, possibly with arguments. -Exec=MAClient +Exec=MAClient -sd 0 -t 30 # The name of the icon that will be used to display this entry Icon=MAClient # Describes whether this application needs to be run in a terminal or not diff --git a/src/cameras.cpp b/src/cameras.cpp index 20ee047..67e3e99 100644 --- a/src/cameras.cpp +++ b/src/cameras.cpp @@ -157,13 +157,20 @@ void Cameras::trigger() if(serial_) { if(captureingCamera == 0) - lightFor(lighting_, exposrueTime_*1.5*cameras_.size()); + { + lightFor(lighting_, 10000); + qDebug()<<__func__<<"started"; + std::this_thread::sleep_for(std::chrono::microseconds(static_cast(exposrueTime_))); + } cameras_[captureingCamera]->cam()->trigger(); ++captureingCamera; if(captureingCamera < cameras_.size()) QTimer::singleShot(exposrueTime_*1000, this, &Cameras::trigger); else + { captureingCamera = 0; + qDebug()<<__func__<<"finished"; + } } else { @@ -271,6 +278,7 @@ void Cameras::imageRecived(Camera::Image img) if(images_.size() == cameras_.size()) { + lightOff(); cameraFailureTimer.stop(); newImages(images_); images_.clear(); diff --git a/src/imagepipeline.cpp b/src/imagepipeline.cpp index 0b72dfe..30ecf13 100644 --- a/src/imagepipeline.cpp +++ b/src/imagepipeline.cpp @@ -7,6 +7,7 @@ #include #include #include +#include ImagePipeline::ImagePipeline(Cameras* cameras, bool simpleStichingAlg, QObject *parent): QObject(parent), cameras_(cameras), simpleStichingAlg_(simpleStichingAlg) @@ -43,6 +44,19 @@ void ImagePipeline::applyDarkMap(cv::Mat& image, const cv::Mat& darkmap) image = subtracted; } +void ImagePipeline::sanityCheckMap(cv::Mat& mat) +{ + for(int y = 0; y < mat.rows; y++) + { + float* col = mat.ptr(y); + for(int x = 0; x < mat.cols; ++x) + { + if(isnan(col[x]) || isinf(col[x])) + col[x] = 0.5; + } + } +} + cv::Mat ImagePipeline::process(const Profile profile, std::vector images, bool simpleStichingAlg) { qDebug()<<__func__<<"got"< if(profile.calcurve.data) applyCurve(output, profile.calcurve); + + sanityCheckMap(output); + return output; } else diff --git a/src/imagepipeline.h b/src/imagepipeline.h index 9e2ff2c..a12f9f8 100644 --- a/src/imagepipeline.h +++ b/src/imagepipeline.h @@ -23,6 +23,7 @@ private: static cv::Mat process(const Profile profile, std::vector images, bool simpleStich); static void applyDarkMap(cv::Mat& image, const cv::Mat &darkmap); + static void sanityCheckMap(cv::Mat& mat); private slots: diff --git a/src/main.cpp b/src/main.cpp index c0f9404..c1a77ce 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -122,41 +122,44 @@ int main(int argc, char *argv[]) MainWindow w(parser.isSet(viewerOption)); - QObject::connect(&cameras, &Cameras::cameraAdded, &w, &MainWindow::addCamera); - QObject::connect(&cameras, &Cameras::cameraRemoved, &w, &MainWindow::removeCamera); - QObject::connect(&cameras, &Cameras::enableCapture, &w, &MainWindow::enableCapture); - QObject::connect(&w, &MainWindow::sigCapture, [&cameras](){cameras.start(); cameras.trigger();}); - - QTimer temperatureTimer; - temperatureTimer.setSingleShot(false); - QObject::connect(&temperatureTimer, &QTimer::timeout, [&cameras, &w](){w.setTemperature(cameras.getMeanTemp());}); - temperatureTimer.start(1000); - - QObject::connect(&w, &MainWindow::sigChooseCameras, [&cameras, &w]() + if(!parser.isSet(viewerOption)) { - bool accepted; - std::vector descs = showCameraSelectionDialog(&accepted, &w); - if(accepted) - cameras.setCameras(descs); - }); + QObject::connect(&cameras, &Cameras::cameraAdded, &w, &MainWindow::addCamera); + QObject::connect(&cameras, &Cameras::cameraRemoved, &w, &MainWindow::removeCamera); + QObject::connect(&cameras, &Cameras::enableCapture, &w, &MainWindow::enableCapture); + QObject::connect(&w, &MainWindow::sigCapture, [&cameras](){cameras.start(); cameras.trigger();}); - QObject::connect(&w, &MainWindow::sigEditProfiles, [&cameras, &w](){showProfileDialog(&cameras, &w); w.refreshProfiles();}); - QObject::connect(&pipe, &ImagePipeline::sigResult, w.mainImageViewer(), &CvImageViewer::setImage, Qt::QueuedConnection); - QObject::connect(&pipe, &ImagePipeline::sigResult, [&w](){w.statusMsg("idle");}); - QObject::connect(&pipe, &ImagePipeline::sigInvalidProfile, &w, &MainWindow::profileInconpatible); + QTimer temperatureTimer; + temperatureTimer.setSingleShot(false); + QObject::connect(&temperatureTimer, &QTimer::timeout, [&cameras, &w](){w.setTemperature(cameras.getMeanTemp());}); + temperatureTimer.start(1000); - QObject::connect(&w, &MainWindow::sigProfile, [&pipe](QString name) - { - Profile profile; - profile.load(name); - if(profile.cameras.size() != 0) - qDebug()<<"loading profile"< descs = showCameraSelectionDialog(&accepted, &w); + if(accepted) + cameras.setCameras(descs); + }); - cameras.load(settings); + QObject::connect(&w, &MainWindow::sigEditProfiles, [&cameras, &w](){showProfileDialog(&cameras, &w); w.refreshProfiles();}); + QObject::connect(&pipe, &ImagePipeline::sigResult, w.mainImageViewer(), &CvImageViewer::setImage, Qt::QueuedConnection); + QObject::connect(&pipe, &ImagePipeline::sigResult, [&w](){w.statusMsg("idle");}); + QObject::connect(&pipe, &ImagePipeline::sigInvalidProfile, &w, &MainWindow::profileInconpatible); + + QObject::connect(&w, &MainWindow::sigProfile, [&pipe](QString name) + { + Profile profile; + profile.load(name); + if(profile.cameras.size() != 0) + qDebug()<<"loading profile"<= 0) diff --git a/src/regessioncalculator.cpp b/src/regessioncalculator.cpp old mode 100755 new mode 100644 diff --git a/src/regessioncalculator.h b/src/regessioncalculator.h old mode 100755 new mode 100644 diff --git a/src/ui/aboutdiag.cpp b/src/ui/aboutdiag.cpp old mode 100755 new mode 100644 diff --git a/src/ui/aboutdiag.h b/src/ui/aboutdiag.h old mode 100755 new mode 100644 diff --git a/src/ui/aboutdiag.ui b/src/ui/aboutdiag.ui old mode 100755 new mode 100644 diff --git a/src/ui/cvimageviewer.cpp b/src/ui/cvimageviewer.cpp index 882c525..937d3fa 100644 --- a/src/ui/cvimageviewer.cpp +++ b/src/ui/cvimageviewer.cpp @@ -186,6 +186,7 @@ void CvImageViewer::convertImage(cv::Mat image) void CvImageViewer::setImage(Camera::Image img) { origImage_=img.mat; + clamp_ = std::numeric_limits::max(); qDebug()<<"viwer got"<