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 
DeviceList discoverDevices()
Discovers new devices and returns the list of all devices that have been found.
The devices performs stereo matching.
The device passes through the input images without modification.
Allows for configuration of the parameters of a Nerian stereo device through a network connection...
Allows for the discovery of devices in the network.
Allied Vision