diff --git a/CMakeLists.txt b/CMakeLists.txt index b575256891fcae540230a3a830e1cf5d7f7fc9ec..6eaf7b6d5304fca33e7009e98e14653de458d535 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -164,3 +164,13 @@ configure_file(${CMAKE_SOURCE_DIR}/common/cpp/src/config.cpp.in ${CMAKE_SOURCE_DIR}/common/cpp/src/config.cpp ) +# For issue #17 +# https://gitlab.kitware.com/cmake/cmake/issues/16915#note_456382 +if ( TARGET Qt5::Core ) + get_property( core_options TARGET Qt5::Core PROPERTY INTERFACE_COMPILE_OPTIONS ) + string( REPLACE "-fPIC" "" new_core_options "${core_options}" ) + set_property( TARGET Qt5::Core PROPERTY INTERFACE_COMPILE_OPTIONS ${new_core_options} ) + set_property( TARGET Qt5::Core PROPERTY INTERFACE_POSITION_INDEPENDENT_CODE "ON" ) + set( CMAKE_CXX_COMPILE_OPTIONS_PIE "-fPIC" ) +endif() + diff --git a/common/config/config.json b/common/config/config.json index c773c0e9ec8db0984600a54e2e32f7a340971f25..186f3821754d22a57367c832415d18263810d622 100644 --- a/common/config/config.json +++ b/common/config/config.json @@ -10,7 +10,10 @@ "nostereo": false, "scale": 1.0, "flip_vert": false, - "max_fps": 25 + "max_fps": 25, + "width": 640, + "height": 480, + "crosshair": false }, "calibrate": false, "calibration": { @@ -55,7 +58,8 @@ "points": true, "depth": false, "left": false, - "right": false + "right": false, + "crosshair": false }, "net": { "listen": "tcp://*:9001", diff --git a/renderer/cpp/include/ftl/display.hpp b/renderer/cpp/include/ftl/display.hpp index c60d5fc052bf2f4784698a2d123f48b6c77ef1a4..04ff003de8b723f0af5d0475a1946fc6f7a4d302 100644 --- a/renderer/cpp/include/ftl/display.hpp +++ b/renderer/cpp/include/ftl/display.hpp @@ -33,7 +33,8 @@ class Display { explicit Display(nlohmann::json &config, std::string name); ~Display(); - bool render(const cv::Mat &rgb, const cv::Mat &depth, const cv::Mat &q); + inline bool render(const cv::Mat &rgb, const cv::Mat &depth, const cv::Mat &q) { return render(rgb, cv::Mat(), q); } + bool render(const cv::Mat &rgb, const cv::Mat &rgbr, const cv::Mat &depth, const cv::Mat &q); #if defined HAVE_PCL bool render(pcl::PointCloud<pcl::PointXYZRGB>::ConstPtr); diff --git a/renderer/cpp/src/display.cpp b/renderer/cpp/src/display.cpp index 991f872247a12fca7f1671c4cd0caacf3cdff7b1..4a64fbb85988d8584b023f4ff65e73b5e3f5fcda 100644 --- a/renderer/cpp/src/display.cpp +++ b/renderer/cpp/src/display.cpp @@ -85,7 +85,7 @@ Display::~Display() { #endif // HAVE_VIZ } -bool Display::render(const cv::Mat &rgb, const cv::Mat &depth, const cv::Mat &q) { +bool Display::render(const cv::Mat &rgb, const cv::Mat &rgbr, const cv::Mat &depth, const cv::Mat &q) { Mat idepth; if (config_["points"] && q.rows != 0) { @@ -125,7 +125,20 @@ bool Display::render(const cv::Mat &rgb, const cv::Mat &depth, const cv::Mat &q) } if (config_["left"]) { - cv::imshow("RGB: " + name_, rgb); + if (config_["crosshair"]) { + cv::line(rgb, cv::Point(0, rgb.rows/2), cv::Point(rgb.cols-1, rgb.rows/2), cv::Scalar(0,0,255), 1); + cv::line(rgb, cv::Point(rgb.cols/2, 0), cv::Point(rgb.cols/2, rgb.rows-1), cv::Scalar(0,0,255), 1); + } + cv::namedWindow("Left: " + name_, cv::WINDOW_KEEPRATIO); + cv::imshow("Left: " + name_, rgb); + } + if (config_["right"]) { + if (config_["crosshair"]) { + cv::line(rgbr, cv::Point(0, rgbr.rows/2), cv::Point(rgbr.cols-1, rgbr.rows/2), cv::Scalar(0,0,255), 1); + cv::line(rgbr, cv::Point(rgbr.cols/2, 0), cv::Point(rgbr.cols/2, rgbr.rows-1), cv::Scalar(0,0,255), 1); + } + cv::namedWindow("Right: " + name_, cv::WINDOW_KEEPRATIO); + cv::imshow("Right: " + name_, rgbr); } if (config_["depth"]) { @@ -197,7 +210,7 @@ void Display::wait(int ms) { #endif // HAVE_VIZ } - if (config_["disparity"]) { + if (config_["disparity"] || config_["left"] || config_["right"]) { if(cv::waitKey(ms) == 27) { // exit if ESC is pressed active_ = false; diff --git a/vision/src/local.cpp b/vision/src/local.cpp index d8d5229e84ccb39b7639a914941185c423b36a27..f26bea1d31c571dbb9b3fc133add138e0e59df3e 100644 --- a/vision/src/local.cpp +++ b/vision/src/local.cpp @@ -58,6 +58,15 @@ LocalSource::LocalSource(nlohmann::json &config) stereo_ = false; LOG(WARNING) << "Not able to find second camera for stereo"; } else { + camera_a_->set(cv::CAP_PROP_FRAME_WIDTH,(int)config["width"]); + camera_a_->set(cv::CAP_PROP_FRAME_HEIGHT,(int)config["height"]); + camera_b_->set(cv::CAP_PROP_FRAME_WIDTH,(int)config["width"]); + camera_b_->set(cv::CAP_PROP_FRAME_HEIGHT,(int)config["height"]); + + Mat frame; + camera_a_->grab(); + camera_a_->retrieve(frame); + LOG(INFO) << "Video size : " << frame.cols << "x" << frame.rows; stereo_ = true; } diff --git a/vision/src/main.cpp b/vision/src/main.cpp index c0524da031957e2bbaddf8ed9ad9800cb1a1ac31..49d3f43dbf0fa1bceda2b64b42d1b67d7f88bb83 100644 --- a/vision/src/main.cpp +++ b/vision/src/main.cpp @@ -184,7 +184,7 @@ static void run(const string &file) { }); // Send RGB+Depth images for local rendering - if (pl.rows > 0) display.render(pl, pdisp, Q_32F); + if (pl.rows > 0) display.render(pl, r, pdisp, Q_32F); display.wait(1); // Wait for both pipelines to complete