40 if (argc != 1 && argc != 2)
45 <<
" ==> Run with default camera parameters (from rawlog file)\n" 47 <<
"[params.cfg] ==> Load stereo camera parameters from cfg file\n";
51 const string sCfgFile = argv[1];
60 timlog.
enter(
"rectifyMap.setFromCamParams");
62 timlog.
leave(
"rectifyMap.setFromCamParams");
67 cout <<
"Please, select the input stereo camera or rawlog file (with " 68 "stereo images)...\n";
74 cout <<
"Video stream open OK\n";
80 std::vector<COpenGLViewport::Ptr> gl_views(2);
83 gl_views[0] = theScene->getViewport(
"main");
85 gl_views[1] = theScene->createViewport(
"right_image");
88 gl_views[0]->setViewportPosition(0, 0, .5, 1.);
89 gl_views[1]->setViewportPosition(.5, 0, .5, 1.);
92 win.unlockAccess3DScene();
98 bool enable_rectify =
true;
99 bool enable_draw_epipolar_lines =
true;
104 cout <<
"Close the window to end.\n";
113 "'r': Switch rectify (Now is: %s) | '+'/'-': Modify " 114 "alpha (Now is: %.02f)",
115 enable_rectify ?
"ON" :
"OFF", rectifyMap.
getAlpha()),
120 "'s': Switch resize output to 320x240 (Now is: %s) | 'c': " 121 "Switch no-disparity (Now is: %s) | 'e': Switch epipolar lines",
126 std::this_thread::sleep_for(1ms);
140 if (!rectifyMap.
isSet())
142 timlog.
enter(
"rectifyMap.setFromCamParams");
144 timlog.
leave(
"rectifyMap.setFromCamParams");
151 win.get3DSceneAndLock();
156 timlog.
enter(
"rectifyMap.rectify()");
159 o->imageLeft, o->imageRight, img_left_rectified,
160 img_right_rectified);
162 timlog.
leave(
"rectifyMap.rectify()");
167 img_left_rectified = o->imageLeft;
168 img_right_rectified = o->imageRight;
172 if (enable_draw_epipolar_lines)
174 const unsigned int LINES_SEP = 40;
175 const unsigned int w = img_left_rectified.
getWidth();
177 for (
unsigned int y = 0;
y < h;
y += LINES_SEP)
179 img_left_rectified.
line(
181 img_right_rectified.line(
186 gl_views[0]->setImageView(img_left_rectified);
187 gl_views[1]->setImageView(img_right_rectified);
193 win.unlockAccess3DScene();
200 int key =
win.getPushedKey(&kmods);
203 if (key ==
'r' || key ==
'R') enable_rectify = !enable_rectify;
204 if (key ==
'e' || key ==
'E')
205 enable_draw_epipolar_lines = !enable_draw_epipolar_lines;
206 if (key ==
'+' || key ==
'-')
209 rectifyMap.
getAlpha() + (key ==
'-' ? -0.1 : 0.1);
213 if (key ==
's' || key ==
'S')
218 if (key ==
'c' || key ==
'C')
231 int main(
int argc,
char** argv)
238 catch (
const std::exception& e)
245 printf(
"Untyped exception!!");
void line(int x0, int y0, int x1, int y1, const mrpt::img::TColor color, unsigned int width=1, TPenStyle penStyle=psSolid) override
Draws a line.
GLclampf GLclampf GLclampf alpha
bool isEnabledBothCentersCoincide() const
void TestStereoRectify(int argc, char **argv)
CCameraSensor::Ptr prepareVideoSourceFromUserSelection()
Show to the user a list of possible camera drivers and creates and open the selected camera...
bool isEnabledResizeOutput() const
Returns whether resizing is enabled (default=false)
This class allows loading and storing values and vectors of different types from ".ini" files easily.
size_t getHeight() const override
Returns the height of the image in pixels.
void setFromCamParams(const mrpt::img::TStereoCamera ¶ms)
Prepares the mapping from the intrinsic, distortion and relative pose parameters of a stereo camera...
std::string timeToString(const mrpt::system::TTimeStamp t)
Convert a timestamp into this textual form (UTC): HH:MM:SS.MMMMMM.
GLubyte GLubyte GLubyte GLubyte w
bool isSet() const
Returns true if setFromCamParams() has been already called, false otherwise.
#define ASSERT_(f)
Defines an assertion mechanism.
size_t getWidth() const override
Returns the width of the image in pixels.
void rectify(const mrpt::img::CImage &in_left_image, const mrpt::img::CImage &in_right_image, mrpt::img::CImage &out_left_image, mrpt::img::CImage &out_right_image) const
Rectify the input image pair and save the result in a different output images - setFromCamParams() mu...
void setAlpha(double alpha)
Sets the alpha parameter which controls the zoom in/out of the rectified images, such that: ...
Observation class for either a pair of left+right or left+disparity images from a stereo camera...
This namespace contains representation of robot actions and observations.
Use this class to rectify stereo images if the same distortion maps are reused over and over again...
Classes for computer vision, detectors, features, etc.
#define IS_CLASS(obj, class_name)
True if the given reference to object (derived from mrpt::rtti::CObject) is of the given class...
void enableBothCentersCoincide(bool enable=true)
If enabled (default=false), the principal points in both output images will coincide.
mrpt::gui::CDisplayWindow3D::Ptr win
static constexpr TColor red()
Predefined colors.
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
A versatile "profiler" that logs the time spent within each pair of calls to enter(X)-leave(X), among other stats.
std::string format(const char *fmt,...) MRPT_printf_format_check(1
A std::string version of C sprintf.
A RGB color - floats in the range [0,1].
The namespace for 3D scene representation and rendering.
std::string exception_to_str(const std::exception &e)
Builds a nice textual representation of a nested exception, which if generated using MRPT macros (THR...
Classes for creating GUI windows for 2D and 3D visualization.
#define ASSERT_FILE_EXISTS_(FIL)
void enableResizeOutput(bool enable, unsigned int target_width=0, unsigned int target_height=0)
If enabled, the computed maps will rectify images to a size different than their original size...
renders glyphs as filled polygons
double getAlpha() const
Return the alpha parameter.
GLenum const GLfloat * params
void enter(const std::string_view &func_name)
Start of a named section.
Structure to hold the parameters of a pinhole stereo camera model.
double leave(const std::string_view &func_name)
End of a named section.
A class for storing images as grayscale or RGB bitmaps.
A graphical user interface (GUI) for efficiently rendering 3D scenes in real-time.