libvisiontransfer  10.6.0
parameter_example.cpp
1 /*******************************************************************************
2  * Copyright (c) 2023 Allied Vision Technologies GmbH
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a copy
5  * of this software and associated documentation files (the "Software"), to deal
6  * in the Software without restriction, including without limitation the rights
7  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8  * copies of the Software, and to permit persons to whom the Software is
9  * furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice shall be included in
12  * all copies or substantial portions of the Software.
13  *******************************************************************************/
14 
15 #include <visiontransfer/deviceenumeration.h>
16 #include <visiontransfer/imagetransfer.h>
17 #include <visiontransfer/imageset.h>
18 #include <visiontransfer/deviceparameters.h>
19 #include <iostream>
20 #include <exception>
21 #include <iomanip>
22 #include <stdio.h>
23 
24 #ifdef _MSC_VER
25  #include <windows.h>
26  // Visual studio does not come with sleep
27  #define sleep(x) Sleep(x*1000)
28 #else
29  #include <unistd.h>
30 #endif
31 
32 using namespace visiontransfer;
33 
34 int main(int, char**) {
35  try {
36  // Search for Nerian stereo devices
37  DeviceEnumeration deviceEnum;
38 
39  DeviceEnumeration::DeviceList devices = deviceEnum.discoverDevices();
40  if(devices.size() == 0) {
41  std::cout << "No devices discovered!" << std::endl;
42  return -1;
43  }
44 
45  // Print devices
46  std::cout << "Discovered devices:" << std::endl;
47  for(unsigned int i = 0; i< devices.size(); i++) {
48  std::cout << devices[i].toString() << std::endl;
49  }
50  std::cout << std::endl;
51 
52  // Create an image transfer object that receives data from
53  // the first detected Nerian stereo device
54  DeviceParameters parameters(devices[0]);
55 
56  // Output the current parameterization
57 
58  const int colW = 35;
59  std::cout << std::boolalpha << std::left;
60  std::cout << "Current Parameters" << std::endl;
61  std::cout << "==================" << std::endl << std::endl;
62  std::cout << std::setw(colW) << "Operation mode: " << parameters.getOperationMode() << std::endl;
63  std::cout << std::setw(colW) << "Disparity offset: " << parameters.getDisparityOffset() << std::endl;
64  std::cout << std::setw(colW) << "Stereo P1 edge: " << parameters.getStereoMatchingP1Edge() << std::endl;
65  std::cout << std::setw(colW) << "Stereo P2 edge: " << parameters.getStereoMatchingP2Edge() << std::endl;
66  std::cout << std::setw(colW) << "Stereo P1 no edge: " << parameters.getStereoMatchingP1NoEdge() << std::endl;
67  std::cout << std::setw(colW) << "Stereo P2 no edge: " << parameters.getStereoMatchingP2NoEdge() << std::endl;
68  std::cout << std::setw(colW) << "Stereo edge sensitivity: " << parameters.getStereoMatchingEdgeSensitivity() << std::endl;
69  std::cout << std::setw(colW) << "Mask border pixels: " << parameters.getMaskBorderPixelsEnabled() << std::endl;
70  std::cout << std::setw(colW) << "Consistency check enabled: " << parameters.getConsistencyCheckEnabled() << std::endl;
71  std::cout << std::setw(colW) << "Consistency check sensitivity: " << parameters.getConsistencyCheckSensitivity() << std::endl;
72  std::cout << std::setw(colW) << "Uniqueness check enabled: " << parameters.getUniquenessCheckEnabled() << std::endl;
73  std::cout << std::setw(colW) << "Uniqueness check sensitivity: " << parameters.getUniquenessCheckSensitivity() << std::endl;
74  std::cout << std::setw(colW) << "Texture filter enabled: " << parameters.getTextureFilterEnabled() << std::endl;
75  std::cout << std::setw(colW) << "Texture filter sensitivity: " << parameters.getTextureFilterSensitivity() << std::endl;
76  std::cout << std::setw(colW) << "Gap interpolation enabled: " << parameters.getGapInterpolationEnabled() << std::endl;
77  std::cout << std::setw(colW) << "Noise reduction enabled: " << parameters.getNoiseReductionEnabled() << std::endl;
78  std::cout << std::setw(colW) << "Speckle filter itarations: " << parameters.getSpeckleFilterIterations() << std::endl;
79  std::cout << std::setw(colW) << "Auto exposure/gain mode: " << parameters.getAutoMode() << std::endl;
80  std::cout << std::setw(colW) << "Auto target intensity: " << parameters.getAutoTargetIntensity() << std::endl;
81  std::cout << std::setw(colW) << "Auto intensity delta : " << parameters.getAutoIntensityDelta() << std::endl;
82  std::cout << std::setw(colW) << "Auto target frame: " << parameters.getAutoTargetFrame() << std::endl;
83  std::cout << std::setw(colW) << "Auto skipped frames: " << parameters.getAutoSkippedFrames() << std::endl;
84  std::cout << std::setw(colW) << "Maximum auto exposure time: " << parameters.getAutoMaxExposureTime() << " us" << std::endl;
85  std::cout << std::setw(colW) << "Maximum auto gain: " << parameters.getAutoMaxGain() << " dB" << std::endl;
86  std::cout << std::setw(colW) << "Manual exposure time: " << parameters.getManualExposureTime() << " us" << std::endl;
87  std::cout << std::setw(colW) << "Manual gain: " << parameters.getManualGain() << " dB" << std::endl;
88  std::cout << std::setw(colW) << "Auto ROI enabled: " << parameters.getAutoROIEnabled() << std::endl;
89 
90  int x = 0, y = 0, width = 0, height = 0;
91  parameters.getAutoROI(x, y, width, height);
92  std::cout << std::setw(colW) << "Auto ROI: " << "(" << x << ", " << y << ") (" << width << " x " << height << ")" << std::endl;
93 
94  std::cout << std::setw(colW) << "Maximum frame time difference: " << parameters.getMaxFrameTimeDifference() << " ms" << std::endl;
95  std::cout << std::setw(colW) << "Trigger frequency: " << parameters.getTriggerFrequency() << " Hz" << std::endl;
96  std::cout << std::setw(colW) << "Trigger 0 enabled: " << parameters.getTrigger0Enabled() << std::endl;
97  std::cout << std::setw(colW) << "Trigger 1 enabled: " << parameters.getTrigger1Enabled() << std::endl;
98  std::cout << std::setw(colW) << "Trigger 0 pulse width: " << parameters.getTrigger0PulseWidth() << " ms"<< std::endl;
99  std::cout << std::setw(colW) << "Trigger 1 pulse width: " << parameters.getTrigger1PulseWidth() << " ms"<< std::endl;
100  std::cout << std::setw(colW) << "Trigger 1 offset: " << parameters.getTrigger1Offset() << " ms"<< std::endl;
101  std::cout << std::setw(colW) << "Auto re-calibration enabled: " << parameters.getAutoRecalibrationEnabled() << std::endl;
102  std::cout << std::setw(colW) << "Save auto re-calibration: " << parameters.getSaveAutoRecalibration() << std::endl;
103 
104 
105  // Change a few selected parameters
106 
107  std::cout << std::endl
108  << "Changing Parameters" << std::endl
109  << "==================" << std::endl << std::endl;
110 
111  std::cout << "Operation mode..." << std:: endl;
112  parameters.setOperationMode(DeviceParameters::PASS_THROUGH);
113  sleep(1);
114  parameters.setOperationMode(DeviceParameters::STEREO_MATCHING);
115  sleep(1);
116 
117  std::cout << "Disparity offset..." << std::endl;
118  try {
119  // This will get refused if the full disparity range is active
120  parameters.setDisparityOffset(10);
121  sleep(1);
122  parameters.setDisparityOffset(0);
123  sleep(1);
124  } catch (...) {
125  std::cout << "... failed (reduce number of disparities to test this)." << std::endl;
126  }
127 
128  std::cout << "Auto exposure target brightness..." << std:: endl;
129  parameters.setAutoTargetIntensity(0.7);
130  sleep(1);
131  parameters.setAutoTargetIntensity(0.33);
132  sleep(1);
133 
134  std::cout << "Trigger frequency..." << std:: endl;
135  parameters.setTriggerFrequency(5);
136  sleep(1);
137  parameters.setTriggerFrequency(30);
138  sleep(1);
139 
140  return 0;
141  } catch(const std::exception& ex) {
142  std::cerr << "Exception occurred: " << ex.what() << std::endl;
143  }
144 
145  return 0;
146 }
147 
visiontransfer::DeviceParameters::PASS_THROUGH
@ PASS_THROUGH
The device passes through the input images without modification.
Definition: deviceparameters.h:111
visiontransfer::DeviceEnumeration::discoverDevices
DeviceList discoverDevices()
Discovers new devices and returns the list of all devices that have been found.
Definition: deviceenumeration.h:66
visiontransfer::DeviceEnumeration
Allows for the discovery of devices in the network.
Definition: deviceenumeration.h:42
visiontransfer::DeviceParameters::STEREO_MATCHING
@ STEREO_MATCHING
The devices performs stereo matching.
Definition: deviceparameters.h:117
visiontransfer::DeviceParameters
Allows for configuration of the parameters of a Nerian stereo device through a network connection.
Definition: deviceparameters.h:62
Allied Vision