manually grab from cameras

This commit is contained in:
Jan Grewe 2024-03-12 15:30:07 +01:00
parent e9b195674c
commit aa265565f2
2 changed files with 25 additions and 11 deletions

View File

@ -1,10 +1,12 @@
#include "dualcamgrabber.h" #include "dualcamgrabber.h"
#include <iostream> #include <iostream>
#include <pylon/PylonIncludes.h> #include <pylon/PylonIncludes.h>
#include <stitchimage.h>
void DualcamGrabber::run() { void DualcamGrabber::run() {
stop_request = false; stop_request = false;
size_t framecount = 0; size_t counter = 0;
if (wrapper->isOpen()) { if (wrapper->isOpen()) {
Pylon::CInstantCameraArray &cameras = wrapper->getCameraArray(); Pylon::CInstantCameraArray &cameras = wrapper->getCameraArray();
wrapper->frameRate(static_cast<uint>(framerate)); wrapper->frameRate(static_cast<uint>(framerate));
@ -12,17 +14,29 @@ void DualcamGrabber::run() {
wrapper->gain(gain); wrapper->gain(gain);
cameras.StartGrabbing(); cameras.StartGrabbing();
Pylon::CGrabResultPtr frame0, frame1; Pylon::CGrabResultPtr frame0, frame1;
Pylon::CPylonImage leftImage;
Pylon::CPylonImage rightImage;
Pylon::CPylonImage stitchedImage;
std::string errorMessage = "";
while (cameras.IsGrabbing() && !stop_request) { while (cameras.IsGrabbing() && !stop_request) {
MyImage *img = new MyImage(); MyImage *img = new MyImage();
cameras.RetrieveResult( 5000, framecount % 2 == 0 ? frame0 : frame1, Pylon::TimeoutHandling_ThrowException ); cameras[0].RetrieveResult( 5000, frame0, Pylon::TimeoutHandling_ThrowException );
img->setFrame(framecount % 2 == 0 ? frame0 : frame1); cameras[1].RetrieveResult( 5000, frame1, Pylon::TimeoutHandling_ThrowException );
if (framecount % 2 == 0) {
buffer0->push(img); leftImage.AttachGrabResultBuffer( frame0 );
} else { rightImage.AttachGrabResultBuffer( frame1 );
buffer1->push(img);
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(); cameras.StopGrabbing();
} }

View File

@ -10,8 +10,8 @@ class DualcamGrabber : public QThread
{ {
Q_OBJECT Q_OBJECT
public: public:
DualcamGrabber(DualcamWrapper *wrapper, ImageBuffer *buffer0, ImageBuffer * buffer1, int framerate, QObject *parent = nullptr) : DualcamGrabber(DualcamWrapper *wrapper, ImageBuffer *buffer, int framerate, QObject *parent = nullptr) :
QThread(parent), wrapper(wrapper), buffer0(buffer0), buffer1(buffer1), framerate(framerate) {} QThread(parent), wrapper(wrapper), buffer(buffer), framerate(framerate) {}
void run() override; void run() override;
void stop(); void stop();
@ -30,7 +30,7 @@ public:
private: private:
bool stop_request = false; bool stop_request = false;
DualcamWrapper *wrapper; DualcamWrapper *wrapper;
ImageBuffer *buffer0, *buffer1; ImageBuffer *buffer;
int framerate; int framerate;
double exposure, gain; double exposure, gain;