multicamera handling
This commit is contained in:
parent
31d5cf22dd
commit
5e958e710f
@ -17,9 +17,11 @@
|
|||||||
#include <QStandardPaths>
|
#include <QStandardPaths>
|
||||||
#include <QStatusBar>
|
#include <QStatusBar>
|
||||||
#include <QToolBar>
|
#include <QToolBar>
|
||||||
|
#include <QErrorMessage>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
#include "camconfig.h"
|
||||||
|
|
||||||
#if defined(QT_PRINTSUPPORT_LIB)
|
#if defined(QT_PRINTSUPPORT_LIB)
|
||||||
# include <QtPrintSupport/qtprintsupportglobal.h>
|
# include <QtPrintSupport/qtprintsupportglobal.h>
|
||||||
@ -42,23 +44,33 @@ PylonRecorder::PylonRecorder(QWidget *parent)
|
|||||||
scrollArea->setWidget(imageLabel);
|
scrollArea->setWidget(imageLabel);
|
||||||
scrollArea->setVisible(false);
|
scrollArea->setVisible(false);
|
||||||
setCentralWidget(scrollArea);
|
setCentralWidget(scrollArea);
|
||||||
|
std::cerr << "PylonRecorder::constructor" << std::endl;
|
||||||
pylon = new PylonWrapper();
|
// Pylon::DeviceInfoList_t deviceList = detectCameras();
|
||||||
buffer = new ImageBuffer(defaultBufferSize);
|
// for (auto dev : deviceList) {
|
||||||
grabber = new Grabber(pylon, buffer, defaultFrameRate);
|
// std::cout << dev.GetFullName() << " " << dev.GetFriendlyName() << std::endl;
|
||||||
writer = new Writer(buffer);
|
// }
|
||||||
connect(writer, &Writer::writingDone, this, &PylonRecorder::writerDone);
|
// std::cout << "peng\n";
|
||||||
|
// std::cout << deviceList.size() << std::endl;
|
||||||
createActions();
|
// std::cout << "peng\n";
|
||||||
updateActions();
|
|
||||||
|
// if (deviceList.size() == 0) {
|
||||||
|
// QErrorMessage message(this);
|
||||||
|
// message.showMessage("No camera detected!");
|
||||||
|
// } else {
|
||||||
|
// std::cout << "peng\n";
|
||||||
|
// buffer = new ImageBuffer(defaultBufferSize);
|
||||||
|
// grabber = new Grabber(pyloncam, buffer, defaultFrameRate);
|
||||||
|
// writer = new Writer(buffer);
|
||||||
|
// connect(writer, &Writer::writingDone, this, &PylonRecorder::writerDone);
|
||||||
|
// }
|
||||||
|
std::cerr << "PylonRecorder::constructor 1" << std::endl;
|
||||||
frameTimer = new QTimer(this);
|
frameTimer = new QTimer(this);
|
||||||
connect(frameTimer, &QTimer::timeout, this, &PylonRecorder::displaySingleFrame);
|
connect(frameTimer, &QTimer::timeout, this, &PylonRecorder::displaySingleFrame);
|
||||||
preassureTimer = new QTimer(this);
|
preassureTimer = new QTimer(this);
|
||||||
connect(preassureTimer, &QTimer::timeout, this, &PylonRecorder::displayBufferPreassure);
|
connect(preassureTimer, &QTimer::timeout, this, &PylonRecorder::displayBufferPreassure);
|
||||||
labelTimer = new QTimer(this);
|
labelTimer = new QTimer(this);
|
||||||
connect(labelTimer, &QTimer::timeout, this, &PylonRecorder::displayActivity);
|
connect(labelTimer, &QTimer::timeout, this, &PylonRecorder::displayActivity);
|
||||||
|
std::cerr << "PylonRecorder::constructor 2" << std::endl;
|
||||||
preassureBar = new QProgressBar(this);
|
preassureBar = new QProgressBar(this);
|
||||||
preassureBar->setRange(0, 100);
|
preassureBar->setRange(0, 100);
|
||||||
preassureBar->setTextVisible(true);
|
preassureBar->setTextVisible(true);
|
||||||
@ -74,7 +86,7 @@ PylonRecorder::PylonRecorder(QWidget *parent)
|
|||||||
loadBar->setFixedSize(200, 25);
|
loadBar->setFixedSize(200, 25);
|
||||||
QLabel *loadLabel = new QLabel("Load:", this);
|
QLabel *loadLabel = new QLabel("Load:", this);
|
||||||
loadLabel->setStyleSheet("QLabel{font-size: 11pt;font-family: Arial;font-weight: Bold}");
|
loadLabel->setStyleSheet("QLabel{font-size: 11pt;font-family: Arial;font-weight: Bold}");
|
||||||
|
std::cerr << "PylonRecorder::constructor 3" << std::endl;
|
||||||
writingLabel = new QLabel("writing");
|
writingLabel = new QLabel("writing");
|
||||||
writingLabel->setEnabled(false);
|
writingLabel->setEnabled(false);
|
||||||
writingLabel->setStyleSheet("QLabel{font-size: 11pt;font-family: Arial;}");
|
writingLabel->setStyleSheet("QLabel{font-size: 11pt;font-family: Arial;}");
|
||||||
@ -85,7 +97,7 @@ PylonRecorder::PylonRecorder(QWidget *parent)
|
|||||||
cameraConnectedLabel = new QLabel("not connected");
|
cameraConnectedLabel = new QLabel("not connected");
|
||||||
cameraConnectedLabel->setStyleSheet("QLabel { color : red; }");
|
cameraConnectedLabel->setStyleSheet("QLabel { color : red; }");
|
||||||
cameraConnectedLabel->setStyleSheet("QLabel{font-size: 11pt;font-family: Arial;}");
|
cameraConnectedLabel->setStyleSheet("QLabel{font-size: 11pt;font-family: Arial;}");
|
||||||
|
std::cerr << "PylonRecorder::constructor 4" << std::endl;
|
||||||
fileLabel = new QLabel();
|
fileLabel = new QLabel();
|
||||||
fileLabel->setStyleSheet("QLabel{font-size: 11pt;font-family: Arial;}");
|
fileLabel->setStyleSheet("QLabel{font-size: 11pt;font-family: Arial;}");
|
||||||
|
|
||||||
@ -95,7 +107,7 @@ PylonRecorder::PylonRecorder(QWidget *parent)
|
|||||||
statusHeader->setStyleSheet("QLabel{font-size: 11pt;font-family: Arial; font-weight: Bold}");
|
statusHeader->setStyleSheet("QLabel{font-size: 11pt;font-family: Arial; font-weight: Bold}");
|
||||||
QLabel *fileHeader = new QLabel("Output file:");
|
QLabel *fileHeader = new QLabel("Output file:");
|
||||||
fileHeader->setStyleSheet("QLabel{font-size: 11pt;font-family: Arial; font-weight: Bold}");
|
fileHeader->setStyleSheet("QLabel{font-size: 11pt;font-family: Arial; font-weight: Bold}");
|
||||||
|
std::cerr << "PylonRecorder::constructor 5" << std::endl;
|
||||||
statusBar()->addWidget(camHeader);
|
statusBar()->addWidget(camHeader);
|
||||||
statusBar()->addWidget(cameraConnectedLabel);
|
statusBar()->addWidget(cameraConnectedLabel);
|
||||||
statusBar()->addWidget(preassureLabel);
|
statusBar()->addWidget(preassureLabel);
|
||||||
@ -108,9 +120,45 @@ PylonRecorder::PylonRecorder(QWidget *parent)
|
|||||||
statusBar()->addWidget(fileHeader);
|
statusBar()->addWidget(fileHeader);
|
||||||
statusBar()->addWidget(fileLabel);
|
statusBar()->addWidget(fileLabel);
|
||||||
resize(QGuiApplication::primaryScreen()->availableSize() * 3 / 5);
|
resize(QGuiApplication::primaryScreen()->availableSize() * 3 / 5);
|
||||||
|
std::cerr << "PylonRecorder::constructor 6" << std::endl;
|
||||||
|
detectCameras();
|
||||||
|
std::cerr << "PylonRecorder::constructor 7" << std::endl;
|
||||||
|
createActions();
|
||||||
|
std::cerr << "PylonRecorder::constructor 8 " << std::endl;
|
||||||
|
updateActions();
|
||||||
|
std::cerr << "PylonRecorder::constructor 9" << std::endl;
|
||||||
applySettings();
|
applySettings();
|
||||||
|
std::cerr << "PylonRecorder::constructor done" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PylonRecorder::setupCameras(){
|
||||||
|
for (auto dev : deviceList) {
|
||||||
|
std::cout << dev.GetFullName() << " " << dev.GetFriendlyName() << std::endl;
|
||||||
|
}
|
||||||
|
std::cout << "peng\n";
|
||||||
|
std::cout << deviceList.size() << std::endl;
|
||||||
|
std::cout << "peng\n";
|
||||||
|
|
||||||
|
if (deviceList.size() == 0) {
|
||||||
|
std::cout << "device list is empty!" << std::endl;
|
||||||
|
QErrorMessage message(this);
|
||||||
|
message.showMessage("No camera detected!");
|
||||||
|
} else {
|
||||||
|
std::cout << "peng\n";
|
||||||
|
// std::string cname = (std::string)deviceList[0].GetFullName();
|
||||||
|
// pyloncam = new PylonWrapper(cname);
|
||||||
|
buffer = new ImageBuffer(defaultBufferSize);
|
||||||
|
grabber = new Grabber(pyloncam, buffer, defaultFrameRate);
|
||||||
|
writer = new Writer(buffer);
|
||||||
|
connect(writer, &Writer::writingDone, this, &PylonRecorder::writerDone);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void PylonRecorder::detectCameras() {
|
||||||
|
Pylon::PylonAutoInitTerm autoInitTerm;
|
||||||
|
Pylon::CTlFactory& TlFactory = Pylon::CTlFactory::GetInstance();
|
||||||
|
TlFactory.EnumerateDevices(deviceList);
|
||||||
|
}
|
||||||
|
|
||||||
PylonRecorder::~PylonRecorder(){
|
PylonRecorder::~PylonRecorder(){
|
||||||
if (grabber->isRunning()) {
|
if (grabber->isRunning()) {
|
||||||
@ -122,8 +170,9 @@ PylonRecorder::~PylonRecorder(){
|
|||||||
writer->wait(1000);
|
writer->wait(1000);
|
||||||
}
|
}
|
||||||
storeSettings();
|
storeSettings();
|
||||||
|
std::cerr << "recorder::destructor" << std::endl;
|
||||||
delete pylon;
|
delete pyloncam;
|
||||||
|
std::cerr << "recorder::destructor" << std::endl;
|
||||||
delete buffer;
|
delete buffer;
|
||||||
delete grabber;
|
delete grabber;
|
||||||
delete writer;
|
delete writer;
|
||||||
@ -504,10 +553,10 @@ void PylonRecorder::updateActions() {
|
|||||||
zoomInAct->setEnabled(!fitToWindowAct->isChecked());
|
zoomInAct->setEnabled(!fitToWindowAct->isChecked());
|
||||||
zoomOutAct->setEnabled(!fitToWindowAct->isChecked());
|
zoomOutAct->setEnabled(!fitToWindowAct->isChecked());
|
||||||
normalSizeAct->setEnabled(!fitToWindowAct->isChecked());
|
normalSizeAct->setEnabled(!fitToWindowAct->isChecked());
|
||||||
disconnect_camera_action->setEnabled(pylon->isOpen());
|
disconnect_camera_action->setEnabled(deviceList.size() > 0);
|
||||||
connect_camera_action->setEnabled(!pylon->isOpen());
|
connect_camera_action->setEnabled(true);
|
||||||
grab_still_action->setEnabled(pylon->isOpen());
|
grab_still_action->setEnabled(deviceList.size() > 0);
|
||||||
grab_continuous_action->setEnabled(pylon->isOpen() && !grabbing);
|
grab_continuous_action->setEnabled(deviceList.size() > 0 && pyloncam->isOpen() && !grabbing);
|
||||||
grab_stop_action->setEnabled(grabbing);
|
grab_stop_action->setEnabled(grabbing);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -533,12 +582,14 @@ void PylonRecorder::applyScaling(){
|
|||||||
|
|
||||||
void PylonRecorder::quitApplication() {
|
void PylonRecorder::quitApplication() {
|
||||||
std::cerr << "Quit Application!" << std::endl;
|
std::cerr << "Quit Application!" << std::endl;
|
||||||
if (pylon->isOpen()) {
|
if (pyloncam->isOpen()) {
|
||||||
|
std::cerr << "Cam is open!" << std::endl;
|
||||||
|
|
||||||
if (grabbing) {
|
if (grabbing) {
|
||||||
stopRecording();
|
stopRecording();
|
||||||
buffer->clear();
|
buffer->clear();
|
||||||
}
|
}
|
||||||
pylon->closeCamera();
|
pyloncam->closeCamera();
|
||||||
}
|
}
|
||||||
this->close();
|
this->close();
|
||||||
}
|
}
|
||||||
@ -549,15 +600,29 @@ void PylonRecorder::adjustScrollBar(QScrollBar *scrollBar, double factor) {
|
|||||||
+ ((factor - 1) * scrollBar->pageStep()/2)));
|
+ ((factor - 1) * scrollBar->pageStep()/2)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PylonRecorder::cameraConfiguration(){
|
||||||
|
CamConfigurator d(this);
|
||||||
|
// QObject::connect(&d, SIGNAL(recent_file_changed(QStringList)), this, SLOT(recent_file_update(QStringList)));
|
||||||
|
// QObject::connect(&d, SIGNAL(column_visibility_changed(QString, QString,bool)), this, SLOT(visible_columns_update(QString, QString,bool)));
|
||||||
|
d.exec();
|
||||||
|
}
|
||||||
|
|
||||||
void PylonRecorder::connectCamera() {
|
void PylonRecorder::connectCamera() {
|
||||||
|
if (deviceList.size() == 0) {
|
||||||
|
detectCameras();
|
||||||
|
QMessageBox msgBox;
|
||||||
|
QString msg = "<p><b>No camera device found!</b></p><br><p>Connect camera and try again!</p>";
|
||||||
|
msgBox.setText(msg);
|
||||||
|
msgBox.exec();
|
||||||
|
} else if (deviceList.size() == 1) {
|
||||||
|
std::string cname = (std::string)deviceList[0].GetFullName();
|
||||||
|
pyloncam = new PylonWrapper(cname);
|
||||||
std::string message;
|
std::string message;
|
||||||
bool success = pylon->openCamera(message);
|
bool success = pyloncam->openCamera(message);
|
||||||
if (success) {
|
if (success) {
|
||||||
cameraConnectedLabel->setText("connected");
|
cameraConnectedLabel->setText("connected");
|
||||||
cameraConnectedLabel->setStyleSheet("QLabel { font-size: 10px;font-family: Arial;color: green;}");
|
cameraConnectedLabel->setStyleSheet("QLabel { font-size: 10px;font-family: Arial;color: green;}");
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
QMessageBox msgBox;
|
QMessageBox msgBox;
|
||||||
QString msg = "<p><b>Could not open camera device!</b><p><p>" + QString::fromStdString(message) + "</p>";
|
QString msg = "<p><b>Could not open camera device!</b><p><p>" + QString::fromStdString(message) + "</p>";
|
||||||
msgBox.setText(msg);
|
msgBox.setText(msg);
|
||||||
@ -565,22 +630,27 @@ void PylonRecorder::connectCamera() {
|
|||||||
}
|
}
|
||||||
statusBar()->showMessage(QString::fromStdString(message));
|
statusBar()->showMessage(QString::fromStdString(message));
|
||||||
updateActions();
|
updateActions();
|
||||||
|
} else { // more than 1 camera
|
||||||
|
cameraConfiguration();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void PylonRecorder::disconnectCamera() {
|
void PylonRecorder::disconnectCamera() {
|
||||||
pylon->closeCamera();
|
if (pyloncam->isOpen()) {
|
||||||
|
pyloncam->closeCamera();
|
||||||
statusBar()->showMessage(tr("Camera closed!"));
|
statusBar()->showMessage(tr("Camera closed!"));
|
||||||
cameraConnectedLabel->setText("not connected");
|
cameraConnectedLabel->setText("not connected");
|
||||||
cameraConnectedLabel->setStyleSheet("QLabel { font-size: 10px;font-family: Arial;color: red;}");
|
cameraConnectedLabel->setStyleSheet("QLabel { font-size: 10px;font-family: Arial;color: red;}");
|
||||||
updateActions();
|
updateActions();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void PylonRecorder::startRecording() {
|
void PylonRecorder::startRecording() {
|
||||||
std::string filename = createFilename();
|
std::string filename = createFilename();
|
||||||
fileLabel->setText(QString::fromStdString(filename));
|
fileLabel->setText(QString::fromStdString(filename));
|
||||||
ImageSettings settings = pylon->getImageSettings();
|
ImageSettings settings = pyloncam->getImageSettings();
|
||||||
|
|
||||||
VideoSpecs specs;
|
VideoSpecs specs;
|
||||||
specs.fps = framerateSpinner->value();
|
specs.fps = framerateSpinner->value();
|
||||||
@ -713,9 +783,9 @@ void PylonRecorder::displayBufferPreassure() {
|
|||||||
|
|
||||||
|
|
||||||
void PylonRecorder::grabStillFromPylon() {
|
void PylonRecorder::grabStillFromPylon() {
|
||||||
if (pylon->isOpen()) {
|
if (pyloncam->isOpen()) {
|
||||||
MyImage img;
|
MyImage img;
|
||||||
bool valid = pylon->grabFrame(img);
|
bool valid = pyloncam->grabFrame(img);
|
||||||
if (valid) {
|
if (valid) {
|
||||||
QImage qimg(static_cast<uchar *>(img.data()), img.width(), img.height(),
|
QImage qimg(static_cast<uchar *>(img.data()), img.width(), img.height(),
|
||||||
QImage::Format::Format_Grayscale8);
|
QImage::Format::Format_Grayscale8);
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
#include <QSpinBox>
|
#include <QSpinBox>
|
||||||
#include <QCheckBox>
|
#include <QCheckBox>
|
||||||
#include <QSettings>
|
#include <QSettings>
|
||||||
|
#include <pylon/PylonIncludes.h>
|
||||||
#include "pylonwrapper.h"
|
#include "pylonwrapper.h"
|
||||||
#include "imagebuffer.h"
|
#include "imagebuffer.h"
|
||||||
#include "grabber.h"
|
#include "grabber.h"
|
||||||
@ -76,13 +76,15 @@ private:
|
|||||||
void setSubjectID();
|
void setSubjectID();
|
||||||
QColor progressColor(int value);
|
QColor progressColor(int value);
|
||||||
std::string createFilename();
|
std::string createFilename();
|
||||||
|
void cameraConfiguration();
|
||||||
|
|
||||||
bool saveFile(const QString &fileName);
|
bool saveFile(const QString &fileName);
|
||||||
void setImage(const QImage &newImage);
|
void setImage(const QImage &newImage);
|
||||||
void scaleImage(double factor);
|
void scaleImage(double factor);
|
||||||
void applyScaling();
|
void applyScaling();
|
||||||
void adjustScrollBar(QScrollBar *scrollBar, double factor);
|
void adjustScrollBar(QScrollBar *scrollBar, double factor);
|
||||||
|
void detectCameras();
|
||||||
|
void setupCameras();
|
||||||
int defaultBufferSize = 3000, defaultFrameRate = 30, movieCount = 0, defaultExposureTime = 6000, defaultGain=13;
|
int defaultBufferSize = 3000, defaultFrameRate = 30, movieCount = 0, defaultExposureTime = 6000, defaultGain=13;
|
||||||
QSettings *settings = new QSettings;
|
QSettings *settings = new QSettings;
|
||||||
QImage image;
|
QImage image;
|
||||||
@ -93,7 +95,7 @@ private:
|
|||||||
QProgressBar *loadBar;
|
QProgressBar *loadBar;
|
||||||
QScrollArea *scrollArea;
|
QScrollArea *scrollArea;
|
||||||
double scaleFactor = 1;
|
double scaleFactor = 1;
|
||||||
PylonWrapper *pylon;
|
PylonWrapper *pyloncam;
|
||||||
ImageBuffer *buffer;
|
ImageBuffer *buffer;
|
||||||
Grabber *grabber;
|
Grabber *grabber;
|
||||||
Writer *writer;
|
Writer *writer;
|
||||||
@ -107,6 +109,7 @@ private:
|
|||||||
QAction *projectSettingsAction;
|
QAction *projectSettingsAction;
|
||||||
QString storageLocation = "";
|
QString storageLocation = "";
|
||||||
ProjectMetadata mdata;
|
ProjectMetadata mdata;
|
||||||
|
Pylon::DeviceInfoList_t deviceList;
|
||||||
|
|
||||||
#if defined(QT_PRINTSUPPORT_LIB) && QT_CONFIG(printer)
|
#if defined(QT_PRINTSUPPORT_LIB) && QT_CONFIG(printer)
|
||||||
QPrinter printer;
|
QPrinter printer;
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
#include "pylonwrapper.h"
|
#include "pylonwrapper.h"
|
||||||
|
|
||||||
PylonWrapper::PylonWrapper():
|
PylonWrapper::PylonWrapper(const std::string &fullName):
|
||||||
valid(false) {
|
valid(false), fullName(fullName) {
|
||||||
Pylon::PylonInitialize();
|
Pylon::PylonInitialize();
|
||||||
camera = new Pylon::CInstantCamera();
|
camera = new Pylon::CInstantCamera();
|
||||||
|
// std::cerr << "Wrapper:camera is open" << camera->IsOpen() << std::endl;
|
||||||
|
// std::cerr << "Wrapper:is valid" << valid << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
PylonWrapper::~PylonWrapper() {
|
PylonWrapper::~PylonWrapper() {
|
||||||
@ -134,11 +136,15 @@ bool PylonWrapper::grabFrame(MyImage &img) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool PylonWrapper::openCamera(std::string &message) {
|
bool PylonWrapper::openCamera(std::string &message) {
|
||||||
|
std::cerr << "open Camera" << std::endl;
|
||||||
try {
|
try {
|
||||||
|
// Pylon::CInstantCamera camera( pTl->CreateDevice( lstDevices[0] );
|
||||||
camera->Attach(Pylon::CTlFactory::GetInstance().CreateFirstDevice());
|
camera->Attach(Pylon::CTlFactory::GetInstance().CreateFirstDevice());
|
||||||
camera->Open();
|
camera->Open();
|
||||||
valid = true;
|
valid = camera->IsOpen();
|
||||||
message = "Successfully opened camera!";
|
message = "Successfully opened camera!";
|
||||||
|
std::cerr << message << std::endl;
|
||||||
|
|
||||||
} catch (const Pylon::GenericException &e) {
|
} catch (const Pylon::GenericException &e) {
|
||||||
message = e.GetDescription();
|
message = e.GetDescription();
|
||||||
std::cerr << "An exception occurred." << std::endl << e.GetDescription() << std::endl;
|
std::cerr << "An exception occurred." << std::endl << e.GetDescription() << std::endl;
|
||||||
@ -148,6 +154,7 @@ bool PylonWrapper::openCamera(std::string &message) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void PylonWrapper::closeCamera() {
|
void PylonWrapper::closeCamera() {
|
||||||
|
std::cerr << "camera close !" << std::endl;
|
||||||
if (camera->IsOpen()) {
|
if (camera->IsOpen()) {
|
||||||
try {
|
try {
|
||||||
camera->Close();
|
camera->Close();
|
||||||
|
@ -15,7 +15,7 @@ struct ImageSettings {
|
|||||||
class PylonWrapper
|
class PylonWrapper
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PylonWrapper();
|
PylonWrapper(const std::string &fullName);
|
||||||
~PylonWrapper();
|
~PylonWrapper();
|
||||||
|
|
||||||
ImageSettings getImageSettings();
|
ImageSettings getImageSettings();
|
||||||
@ -36,6 +36,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
Pylon::CInstantCamera *camera;
|
Pylon::CInstantCamera *camera;
|
||||||
bool valid;
|
bool valid;
|
||||||
|
std::string fullName;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user