From aa265565f245bc4070d00443453e758f7c73bd9b Mon Sep 17 00:00:00 2001 From: Jan Grewe Date: Tue, 12 Mar 2024 15:30:07 +0100 Subject: [PATCH] manually grab from cameras --- dualcamgrabber.cpp | 30 ++++++++++++++++++++++-------- dualcamgrabber.h | 6 +++--- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/dualcamgrabber.cpp b/dualcamgrabber.cpp index 3f073a1..15b9de3 100644 --- a/dualcamgrabber.cpp +++ b/dualcamgrabber.cpp @@ -1,10 +1,12 @@ #include "dualcamgrabber.h" #include #include +#include void DualcamGrabber::run() { stop_request = false; - size_t framecount = 0; + size_t counter = 0; + if (wrapper->isOpen()) { Pylon::CInstantCameraArray &cameras = wrapper->getCameraArray(); wrapper->frameRate(static_cast(framerate)); @@ -12,17 +14,29 @@ void DualcamGrabber::run() { wrapper->gain(gain); cameras.StartGrabbing(); Pylon::CGrabResultPtr frame0, frame1; + Pylon::CPylonImage leftImage; + Pylon::CPylonImage rightImage; + Pylon::CPylonImage stitchedImage; + std::string errorMessage = ""; while (cameras.IsGrabbing() && !stop_request) { MyImage *img = new MyImage(); - cameras.RetrieveResult( 5000, framecount % 2 == 0 ? frame0 : frame1, Pylon::TimeoutHandling_ThrowException ); - img->setFrame(framecount % 2 == 0 ? frame0 : frame1); - if (framecount % 2 == 0) { - buffer0->push(img); - } else { - buffer1->push(img); + cameras[0].RetrieveResult( 5000, frame0, Pylon::TimeoutHandling_ThrowException ); + cameras[1].RetrieveResult( 5000, frame1, Pylon::TimeoutHandling_ThrowException ); + + leftImage.AttachGrabResultBuffer( frame0 ); + rightImage.AttachGrabResultBuffer( frame1 ); + + if (leftImage.IsValid() && rightImage.IsValid()) { + try { + StitchImage::StitchToRight(leftImage, rightImage, &stitchedImage, errorMessage); + img->setFrame(stitchedImage); + buffer->push(img); + } catch(const std::exception& e) { + std::cerr << e.what() << '\n'; + } } - framecount += 1; + counter += 1; } cameras.StopGrabbing(); } diff --git a/dualcamgrabber.h b/dualcamgrabber.h index aef1afa..3564312 100644 --- a/dualcamgrabber.h +++ b/dualcamgrabber.h @@ -10,8 +10,8 @@ class DualcamGrabber : public QThread { Q_OBJECT public: - DualcamGrabber(DualcamWrapper *wrapper, ImageBuffer *buffer0, ImageBuffer * buffer1, int framerate, QObject *parent = nullptr) : - QThread(parent), wrapper(wrapper), buffer0(buffer0), buffer1(buffer1), framerate(framerate) {} + DualcamGrabber(DualcamWrapper *wrapper, ImageBuffer *buffer, int framerate, QObject *parent = nullptr) : + QThread(parent), wrapper(wrapper), buffer(buffer), framerate(framerate) {} void run() override; void stop(); @@ -30,7 +30,7 @@ public: private: bool stop_request = false; DualcamWrapper *wrapper; - ImageBuffer *buffer0, *buffer1; + ImageBuffer *buffer; int framerate; double exposure, gain;