2 #include <opencv2/opencv.hpp>
7 constexpr
auto FPS = 30.0;
20 auto now = std::chrono::steady_clock::now();
29 auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(
frameTimes.back() -
frameTimes.front()).count();
30 return (
frameTimes.size() - 1) * 1000.0 / duration;
34 std::queue<std::chrono::steady_clock::time_point>
frameTimes;
41 rgbWeight =
static_cast<double>(percentRgb) / 100.0;
46 cv::Mat invalidMask = (frameDepth == 0);
47 cv::Mat depthFrameColor;
49 double minDepth = 0.0;
50 double maxDepth = 0.0;
51 cv::minMaxIdx(frameDepth, &minDepth, &maxDepth,
nullptr,
nullptr, ~invalidMask);
52 if(minDepth == maxDepth) {
53 depthFrameColor = cv::Mat::zeros(frameDepth.size(), CV_8UC3);
54 return depthFrameColor;
57 frameDepth.convertTo(logDepth, CV_32F);
59 logDepth.setTo(
log(minDepth), invalidMask);
60 cv::normalize(logDepth, logDepth, 0, 255, cv::NORM_MINMAX, CV_8UC1);
61 cv::applyColorMap(logDepth, depthFrameColor, cv::COLORMAP_JET);
62 depthFrameColor.setTo(cv::Scalar(0, 0, 0), invalidMask);
63 }
catch(
const std::exception& e) {
64 depthFrameColor = cv::Mat::zeros(frameDepth.size(), CV_8UC3);
66 return depthFrameColor;
97 out->setStreamName(
"out");
99 sync->setSyncThreshold(std::chrono::milliseconds(
static_cast<int>((1 /
FPS) * 1000.0 * 0.5)));
102 camRgb->isp.link(sync->inputs[
"rgb"]);
103 left->out.link(stereo->left);
104 right->
out.
link(stereo->right);
105 stereo->depth.link(align->
input);
106 align->outputAligned.link(sync->inputs[
"depth_aligned"]);
107 camRgb->isp.link(align->inputAlignTo);
108 sync->out.link(out->input);
115 std::string windowName =
"rgb-depth";
116 cv::namedWindow(windowName, cv::WINDOW_NORMAL);
117 cv::resizeWindow(windowName, 1280, 720);
125 auto frameDepth = messageGroup->get<
dai::ImgFrame>(
"depth_aligned");
127 if(frameRgb && frameDepth) {
133 cv::imshow(
"Depth aligned", alignedDepthColorized);
137 cv::putText(blended,
"FPS: " +
std::to_string(fpsCounter.
getFps()), cv::Point(10, 30), cv::FONT_HERSHEY_SIMPLEX, 1, cv::Scalar(255, 255, 255), 2);
138 cv::imshow(windowName, blended);
141 int key = cv::waitKey(1);
142 if(key ==
'q' || key ==
'Q') {