[exposure] enable to set the exposure time
This commit is contained in:
		
							parent
							
								
									e28c0b159b
								
							
						
					
					
						commit
						0290ecb192
					
				@ -7,6 +7,7 @@ void Grabber::run() {
 | 
				
			|||||||
  int count = 0;
 | 
					  int count = 0;
 | 
				
			||||||
  if (camera->isOpen()) {
 | 
					  if (camera->isOpen()) {
 | 
				
			||||||
      camera->frameRate(static_cast<uint>(framerate));
 | 
					      camera->frameRate(static_cast<uint>(framerate));
 | 
				
			||||||
 | 
					      camera->exposureTime(exposure);
 | 
				
			||||||
      Pylon::CGrabResultPtr frame;
 | 
					      Pylon::CGrabResultPtr frame;
 | 
				
			||||||
      Pylon::CInstantCamera *cam = camera->getCamera();
 | 
					      Pylon::CInstantCamera *cam = camera->getCamera();
 | 
				
			||||||
      cam->StartGrabbing();
 | 
					      cam->StartGrabbing();
 | 
				
			||||||
 | 
				
			|||||||
@ -19,11 +19,16 @@ public:
 | 
				
			|||||||
    return framerate;
 | 
					    return framerate;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  double currentExposureTime() {
 | 
				
			||||||
 | 
					      return exposure;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
  bool stop_request = false;
 | 
					  bool stop_request = false;
 | 
				
			||||||
  PylonWrapper *camera;
 | 
					  PylonWrapper *camera;
 | 
				
			||||||
  ImageBuffer *buffer;
 | 
					  ImageBuffer *buffer;
 | 
				
			||||||
  int framerate;
 | 
					  int framerate;
 | 
				
			||||||
 | 
					  double exposure;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public slots:
 | 
					public slots:
 | 
				
			||||||
  void requestStop() {
 | 
					  void requestStop() {
 | 
				
			||||||
@ -32,6 +37,9 @@ public slots:
 | 
				
			|||||||
  void setFrameRate(int newFramerate) {
 | 
					  void setFrameRate(int newFramerate) {
 | 
				
			||||||
    framerate = newFramerate;
 | 
					    framerate = newFramerate;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					  void setExposureTime(double newExposureTime) {
 | 
				
			||||||
 | 
					    exposure = newExposureTime;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
signals:
 | 
					signals:
 | 
				
			||||||
  void terminated();
 | 
					  void terminated();
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
@ -385,6 +385,13 @@ void PylonRecorder::createActions() {
 | 
				
			|||||||
  buffersizeSpinner->setFixedSize(120, 25);
 | 
					  buffersizeSpinner->setFixedSize(120, 25);
 | 
				
			||||||
  buffersizeSpinner->setStyleSheet("QSpinBox{font-size: 10px;font-family: Arial;color: rgb(0, 0, 0);background-color: rgb(255,255,255);}");
 | 
					  buffersizeSpinner->setStyleSheet("QSpinBox{font-size: 10px;font-family: Arial;color: rgb(0, 0, 0);background-color: rgb(255,255,255);}");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  exposureSpinner = new QSpinBox();
 | 
				
			||||||
 | 
					  exposureSpinner->setRange(10, 50000);
 | 
				
			||||||
 | 
					  exposureSpinner->setSingleStep(10);
 | 
				
			||||||
 | 
					  exposureSpinner->setValue(defaultExposureTime);
 | 
				
			||||||
 | 
					  exposureSpinner->setFixedSize(120, 25);
 | 
				
			||||||
 | 
					  exposureSpinner->setStyleSheet("QSpinBox{font-size: 10px;font-family: Arial;color: rgb(0, 0, 0);background-color: rgb(255,255,255);}");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  dryRunCheckBox = new QCheckBox("Dry run, no writing");
 | 
					  dryRunCheckBox = new QCheckBox("Dry run, no writing");
 | 
				
			||||||
  dryRunCheckBox->setChecked(false);
 | 
					  dryRunCheckBox->setChecked(false);
 | 
				
			||||||
  dryRunCheckBox->setFixedSize(150, 25);
 | 
					  dryRunCheckBox->setFixedSize(150, 25);
 | 
				
			||||||
@ -400,9 +407,12 @@ void PylonRecorder::createActions() {
 | 
				
			|||||||
  toolbar->addAction(grab_continuous_action);
 | 
					  toolbar->addAction(grab_continuous_action);
 | 
				
			||||||
  toolbar->addAction(grab_stop_action);
 | 
					  toolbar->addAction(grab_stop_action);
 | 
				
			||||||
  toolbar->addSeparator();
 | 
					  toolbar->addSeparator();
 | 
				
			||||||
  toolbar->addWidget(new QLabel("frame rate:"));
 | 
					  toolbar->addWidget(new QLabel("frame rate (Hz):"));
 | 
				
			||||||
  toolbar->addWidget(framerateSpinner);
 | 
					  toolbar->addWidget(framerateSpinner);
 | 
				
			||||||
  toolbar->addSeparator();
 | 
					  toolbar->addSeparator();
 | 
				
			||||||
 | 
					  toolbar->addWidget(new QLabel("exposure time (us):"));
 | 
				
			||||||
 | 
					  toolbar->addWidget(exposureSpinner);
 | 
				
			||||||
 | 
					  toolbar->addSeparator();
 | 
				
			||||||
  toolbar->addWidget(new QLabel("buffer size:"));
 | 
					  toolbar->addWidget(new QLabel("buffer size:"));
 | 
				
			||||||
  toolbar->addWidget(buffersizeSpinner);
 | 
					  toolbar->addWidget(buffersizeSpinner);
 | 
				
			||||||
  toolbar->addSeparator();
 | 
					  toolbar->addSeparator();
 | 
				
			||||||
@ -480,11 +490,11 @@ void PylonRecorder::disconnectCamera() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void PylonRecorder::startRecording() {
 | 
					void PylonRecorder::startRecording() {
 | 
				
			||||||
  std::string filename = createFilename();
 | 
					  std::string filename = createFilename();
 | 
				
			||||||
  //std::cerr << filename << std::endl;
 | 
					 | 
				
			||||||
  fileLabel->setText(QString::fromStdString(filename));
 | 
					  fileLabel->setText(QString::fromStdString(filename));
 | 
				
			||||||
  VideoSpecs specs;
 | 
					  VideoSpecs specs;
 | 
				
			||||||
  specs.fps = framerateSpinner->value();
 | 
					  specs.fps = framerateSpinner->value();
 | 
				
			||||||
  specs.filename = filename;
 | 
					  specs.filename = filename;
 | 
				
			||||||
 | 
					  specs.exposureTime = static_cast<double>(exposureSpinner->value());
 | 
				
			||||||
  ImageSettings settings = pylon->getImageSettings();
 | 
					  ImageSettings settings = pylon->getImageSettings();
 | 
				
			||||||
  specs.width = static_cast<uint32_t>(settings.width);
 | 
					  specs.width = static_cast<uint32_t>(settings.width);
 | 
				
			||||||
  specs.height= static_cast<uint32_t>(settings.height);
 | 
					  specs.height= static_cast<uint32_t>(settings.height);
 | 
				
			||||||
@ -497,6 +507,8 @@ void PylonRecorder::startRecording() {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
  if (framerateSpinner->value() != grabber->currentFramerate())
 | 
					  if (framerateSpinner->value() != grabber->currentFramerate())
 | 
				
			||||||
    grabber->setFrameRate(framerateSpinner->value());
 | 
					    grabber->setFrameRate(framerateSpinner->value());
 | 
				
			||||||
 | 
					  if (exposureSpinner->value() != int(grabber->currentExposureTime()))
 | 
				
			||||||
 | 
					      grabber->setExposureTime(static_cast<double>(exposureSpinner->value()));
 | 
				
			||||||
  writer->setVideoSpecs(specs);
 | 
					  writer->setVideoSpecs(specs);
 | 
				
			||||||
  buffer->clear();
 | 
					  buffer->clear();
 | 
				
			||||||
  grabber->start();
 | 
					  grabber->start();
 | 
				
			||||||
 | 
				
			|||||||
@ -76,7 +76,7 @@ private:
 | 
				
			|||||||
    void applyScaling();
 | 
					    void applyScaling();
 | 
				
			||||||
    void adjustScrollBar(QScrollBar *scrollBar, double factor);
 | 
					    void adjustScrollBar(QScrollBar *scrollBar, double factor);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    int defaultBufferSize = 1000, defaultFrameRate = 30, movieCount = 0;
 | 
					    int defaultBufferSize = 1000, defaultFrameRate = 30, movieCount = 0, defaultExposureTime = 3000;
 | 
				
			||||||
    QImage image;
 | 
					    QImage image;
 | 
				
			||||||
    QTimer *frameTimer, *preassureTimer, *labelTimer;
 | 
					    QTimer *frameTimer, *preassureTimer, *labelTimer;
 | 
				
			||||||
    QLabel *imageLabel, *writingLabel, *grabbingLabel, *cameraConnectedLabel, *fileLabel;
 | 
					    QLabel *imageLabel, *writingLabel, *grabbingLabel, *cameraConnectedLabel, *fileLabel;
 | 
				
			||||||
@ -94,7 +94,7 @@ private:
 | 
				
			|||||||
    QString activeLabelStyleHigh = "QLabel { font-size: 10px;font-family: Arial; color : red; }";
 | 
					    QString activeLabelStyleHigh = "QLabel { font-size: 10px;font-family: Arial; color : red; }";
 | 
				
			||||||
    QString activeLabelStyleLow = "QLabel { font-size: 10px;font-family: Arial; color : cmyk(0, 255, 255, 0, 50); }";
 | 
					    QString activeLabelStyleLow = "QLabel { font-size: 10px;font-family: Arial; color : cmyk(0, 255, 255, 0, 50); }";
 | 
				
			||||||
    QString inactiveLabelStyle = ("QLabel { font-size: 10px;font-family: Arial; color :gray; }");
 | 
					    QString inactiveLabelStyle = ("QLabel { font-size: 10px;font-family: Arial; color :gray; }");
 | 
				
			||||||
    QSpinBox *framerateSpinner, *buffersizeSpinner;
 | 
					    QSpinBox *framerateSpinner, *buffersizeSpinner, *exposureSpinner;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(QT_PRINTSUPPORT_LIB) && QT_CONFIG(printer)
 | 
					#if defined(QT_PRINTSUPPORT_LIB) && QT_CONFIG(printer)
 | 
				
			||||||
 | 
				
			|||||||
@ -59,6 +59,29 @@ double PylonWrapper::frameRate() {
 | 
				
			|||||||
  return rate;
 | 
					  return rate;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					double PylonWrapper::exposureTime() {
 | 
				
			||||||
 | 
					  double time = -1.;
 | 
				
			||||||
 | 
					  if (valid) {
 | 
				
			||||||
 | 
					      GenApi::INodeMap& nodemap = camera->GetNodeMap();
 | 
				
			||||||
 | 
					      GenApi::INode* n = nodemap.GetNode( "ExposureTime" );
 | 
				
			||||||
 | 
					      Pylon::CFloatParameter exposure_time( n );
 | 
				
			||||||
 | 
					      time = exposure_time.GetValue();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  return time;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool PylonWrapper::exposureTime(double exposure_time) {
 | 
				
			||||||
 | 
					    if (valid) {
 | 
				
			||||||
 | 
					        GenApi::INodeMap& nodemap = camera->GetNodeMap();
 | 
				
			||||||
 | 
					        GenApi::CEnumerationPtr(nodemap.GetNode( "ExposureTimeMode" ))->FromString("Standard");
 | 
				
			||||||
 | 
					        GenApi::INode* n = nodemap.GetNode( "ExposureTime" );
 | 
				
			||||||
 | 
					        Pylon::CFloatParameter exp_time( n );
 | 
				
			||||||
 | 
					        exp_time.SetValue( exposure_time );
 | 
				
			||||||
 | 
					        return true;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    return false;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ImageSettings PylonWrapper::getImageSettings() {
 | 
					ImageSettings PylonWrapper::getImageSettings() {
 | 
				
			||||||
  ImageSettings settings;
 | 
					  ImageSettings settings;
 | 
				
			||||||
  if (valid) {
 | 
					  if (valid) {
 | 
				
			||||||
 | 
				
			|||||||
@ -27,6 +27,8 @@ public:
 | 
				
			|||||||
    bool frameRate(uint framerate);
 | 
					    bool frameRate(uint framerate);
 | 
				
			||||||
    double frameRate();
 | 
					    double frameRate();
 | 
				
			||||||
    double maxFrameRate();
 | 
					    double maxFrameRate();
 | 
				
			||||||
 | 
					    double exposureTime();
 | 
				
			||||||
 | 
					    bool exposureTime(double exposure_time);
 | 
				
			||||||
    Pylon::CInstantCamera *getCamera();
 | 
					    Pylon::CInstantCamera *getCamera();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										1
									
								
								writer.h
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								writer.h
									
									
									
									
									
								
							@ -11,6 +11,7 @@ struct VideoSpecs {
 | 
				
			|||||||
  std::string filename;
 | 
					  std::string filename;
 | 
				
			||||||
  uint32_t width, height, quality = 95;
 | 
					  uint32_t width, height, quality = 95;
 | 
				
			||||||
  int fps;
 | 
					  int fps;
 | 
				
			||||||
 | 
					  double exposureTime;
 | 
				
			||||||
  Pylon::EPixelType pixelType;
 | 
					  Pylon::EPixelType pixelType;
 | 
				
			||||||
  Pylon::EImageOrientation orientation;
 | 
					  Pylon::EImageOrientation orientation;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user