From d94f9905e72d86b21d0dc9faf47bea115f5b7cb7 Mon Sep 17 00:00:00 2001 From: TinyO Date: Mon, 21 Oct 2019 16:22:57 +0800 Subject: [PATCH] feat(sample): add depth and disparity dome. --- samples/CMakeLists.txt | 1 + samples/save_depth_and_disparity.cc | 67 +++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 samples/save_depth_and_disparity.cc diff --git a/samples/CMakeLists.txt b/samples/CMakeLists.txt index 36a3b89..545170a 100644 --- a/samples/CMakeLists.txt +++ b/samples/CMakeLists.txt @@ -209,6 +209,7 @@ if(WITH_API) ) make_executable2(get_imu SRCS get_imu.cc util_cv.cc WITH_OPENCV) make_executable2(save_single_image SRCS save_single_image.cc WITH_OPENCV) + make_executable2(save_depth_and_disparity SRCS save_depth_and_disparity.cc WITH_OPENCV) make_executable2(get_from_callbacks SRCS get_from_callbacks.cc util_cv.cc WITH_OPENCV diff --git a/samples/save_depth_and_disparity.cc b/samples/save_depth_and_disparity.cc new file mode 100644 index 0000000..3f98e93 --- /dev/null +++ b/samples/save_depth_and_disparity.cc @@ -0,0 +1,67 @@ +#include +#include + +#include "mynteye/api/api.h" + +MYNTEYE_USE_NAMESPACE + +int main(int argc, char *argv[]) { + auto &&api = API::Create(argc, argv); + if (!api) return 1; + + bool ok; + auto &&request = api->SelectStreamRequest(&ok); + if (!ok) return 1; + api->ConfigStreamRequest(request); + + api->EnableStreamData(Stream::DEPTH); + + api->Start(Source::VIDEO_STREAMING); + + cv::namedWindow("disparity"); + cv::namedWindow("depth_real"); + + std::int32_t count = 0; + std::cout << "Press 'Space' 's' 'S' to save image." << std::endl; + while (true) { + api->WaitForStreams(); + + auto &&depth_data = api->GetStreamData(Stream::DEPTH); + if (!depth_data.frame.empty()) { + cv::imshow("depth_real", depth_data.frame); // CV_16UC1 + } + + auto &&dis_data = api->GetStreamData(Stream::DISPARITY); + if (!dis_data.frame.empty()) { + cv::imshow("disparity", dis_data.frame); // CV_16UC1 + } + + char key = static_cast(cv::waitKey(1)); + if (key == 27 || key == 'q' || key == 'Q') { // ESC/Q + break; + } else { + if (!depth_data.frame.empty()) { + char d_name[20]; + ++count; + snprintf(d_name, sizeof(d_name), "depth_%d.jpg", count); + + cv::imwrite(d_name, depth_data.frame); + + std::cout << "Saved " << d_name << " to current directory" << std::endl; + } + + if (!dis_data.frame.empty()) { + char dis_name[20]; + ++count; + snprintf(dis_name, sizeof(dis_name), "disparity_%d.jpg", count); + + cv::imwrite(dis_name, dis_data.frame); + + std::cout << "Saved " << dis_name << " to current directory" << std::endl; + } + } + } + + api->Stop(Source::VIDEO_STREAMING); + return 0; +}