manually grab from cameras
This commit is contained in:
parent
e9b195674c
commit
aa265565f2
@ -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();
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user