Skip to content
No results
Purple hexagonal logo with white diamond-shaped center featuring geometric star pattern design suitable for corporate branding and digital applications
LIPS®Developer
Documentation
Back To LIPS
Purple hexagonal logo with white diamond-shaped center featuring geometric star pattern design suitable for corporate branding and digital applications
LIPS®Developer
Documentation
Back To LIPS

Quick Introduction

7
  • LIPS® Documentation Overview
  • 3D Depth Camera Tech Overview
  • Depth Image
  • Understanding Depth
  • An Ideal Depth Camera
  • LIPSedge™ AE Series Camera Selection Guide
  • Frequently Asked Questions

LIPSedge Documents

57
  • LIPSMetric™ ST110d
    • User’s Manual
    • SDK Release
  • LIPSMetric™ ST115b
    • User’s Manual
    • SDK Release
  • LIPSMetric™ HA110-M
    • User’s Manual
    • SDK Release
  • LIPSMetric™ HA115a
    • SDK Release
    • User’s Manual
  • LIPSedge™ AE400 / AE450
    • LIPSedge™ AE400 / AE450 Complementary Documents
      • Certifications Documents
      • STEP files for CAD Use
      • Firmware
    • LIPSedge™ AE400 / AE450 User Guide
      • LIPSedge™ AE400 / AE450
      • User Guide
      • Previous Releases (Archive)
    • LIPSedge™ AE400 / AE450 SDK Release
      • SDK Release
      • Previous Releases (Archive)
    • LIPSedge™ AE400 / AE450 Installation
      • Installation
      • Linux
      • Windows
      • ROS Wrapper
      • NVIDIA ISAAC Wrapper
      • Persistent Connection
  • LIPSedge™ AE430 / AE470
    • LIPSedge™ AE430 / AE470 Supplementary Documents
      • Firmware
      • STEP files for CAD Use
    • LIPSedge™ AE430 / AE470 User Guide
      • LIPSedge™ AE430 / AE470
      • User Guide
      • Previous Releases (Archive)
    • LIPSedge™ AE430 / AE470 SDK Release
      • SDK Release
      • Previous Releases (Archive)
  • LIPSedge™ DL & M3 Series
    • LIPSedge™ DL & M3 Series Installation
      • Installation
      • Ubuntu
      • Windows
    • LIPSedge™ DL & M3 Supplementary Documents
      • STEP files for CAD Use
    • LIPSedge™ DL & M3 Series SDK Release
      • SDK Release
      • Changelog
      • Previous Releases (Archive)
    • LIPSedge™ DL & M3 Series User Guide
      • LIPSedge™ DL & M3 Series
      • User Guide
      • Previous Releases (Archive)
  • LIPSedge™ L215u / L210u
    • LIPSedge™ L215u / L210u User Guide
      • LIPSedge™ L215u / L210u
      • User Guide
      • Previous Releases (Archive)
    • LIPSedge™ L215u / L210u SDK Release
      • SDK Release
      • Changelog
      • Previous Releases (Archive)
    • LIPSedge™ L215u / L210u Installation
      • Installation
      • Linux
      • Windows
    • LIPSedge™ L215u / L210u Supplementary Documents
      • STEP files for CAD Use
  • LIPSedge™ L235
    •  LIPSedge™ L235 User’s Manual
    • LIPSedge™ L235 SDK Release
  • LIPSedge™ S Series
    • LIPSedge™ S Series User Guide
      •  LIPSedge™ S Series
      • User Guide
    • LIPSedge™ S Series SDK Release
      • SDK Release
    • LIPSedge™ S Series Installation
      • Windows
  • LIPSedge™ AE430-DK / AE470-DK
    • LIPSedge™ AE430-DK / AE470-DK
    • User Guide

LIPSedge™ SDK 1.x

82
  • Introduction to LIPSedge™ SDK 1.x
    • LIPSedge™ SDK 1.x
    • Benefits from LIPSedge™ SDK implementation
    • LIPSedge™ SDK 1.x Installation Architecture
    • How to identify each camera SDK
  • Tutorial and deployment
    • Tutorials
    • Development and Deployment on arm64
  • Features Articles
    • Features Articles
    • LIPSedge™ SDK Persistent Connection for PoE and USB
  • LIPSedge™ SDK Frameworks
    • LIPSedge™ SDK Frameworks
    • ROS
    • ROS2
    • NVIDIA Isaac Wrapper
    • GenICam (for Halcon / Aurora Vision)
      • GenICam (for Halcon / Aurora Vision)
      • User Manual
      • Driver(.cti) and Nodemap (.xml)
      • Supported LIPSedge™ Camera SDK
      • Installation Example
  • LIPSedge™ SDK v1.02 Tools
    • LIPSedge™ SDK v1.02 Tools
    • DepthViewer
    • PointCloudViewer
    • CameraParameterViewer
    • CameraCenterViewer
    • CameraEventListener
    • CameraPowerTest
    • LensModeSelector
    • LIPSImuReader
    • CameraSimpleViewer
    • RawFileViewer
  • LIPSedge™ SDK Languages & Libraries
    • LIPSedge™ SDK Languages & Libraries
    • OpenCV
    • C++
      • C++
      • environment-setup
      • hello-lipsedge-sdk
      • opencv-viewer
      • roi
      • depth-data
      • align-depth-color
      • range-filter
      • remove-background
      • record
      • pointcloud
      • config-resolution
      • camera-parameter
      • align
      • distance
      • grabcuts
      • measure
      • motion
      • post-processing
      • save-to-disk
      • sensor-control
    • Python
      • Python
      • environment-setup
      • hello-lipsedge-sdk
      • opencv-viewer
      • roi
      • depth-data
      • align-depth-color
      • range-filter
      • remove-background
      • record
    • Java
      • Java
      • ni-hello
    • C#
      • C#
      • ni-hello
      • simple-read
  • New Features for v1.02
    • New Features for v1.02
    • Installing and identifying packages on Windows
    • Saving Captures and Videos with the DepthViewer
    • Saving Point Cloud with PointCloudViewer
    • Live On-Screen displaying Depth, FPS
    • Live On-Screen displaying XYZ parameters in RawfileViewer
    • Distance measurement on-screen from point-to-point
    • Mouse Pointer Change
    • LIPSedge™ AE and S series Colormap new feature addition
    • Simple naming for LIPSedge™ SDK Tools
    • Importing parameters from .json files for LIPSedge™ AE and S series
  • LIPSedge™ SDK Sample Codes
    • LIPSedge™ SDK Sample Codes
    • Sample Applications & Viewer & Utilities
      • Sample Applications & Viewer & Utilities
      • ni-viewer
      • ni-pointcloud-gl
      • ni-camera-matrix

LIPSense Documents

33
  • LIPSense™ 3D Body Pose Middleware
    • LIPSense™ 3D Body Pose SDK
    • User Manual & SDK Download
    • License Management
    • Changelog
    • Previous Releases (Archive)
    • Examples
      • Python
        • Python
        • python_example
      • c#
        • SkeletonCSharp
        • C#
      • C++
        • C++
        • skeleton_example
        • skeleton_opencv
  • LIPScan 3D ™ Middleware
    • LIPScan 3D ™ Middleware
    • LIPScan 3D™ Desktop
      • LIPScan 3D™ Desktop
      • User Guide
      • Application Download
      • Release Notes
      • Previous Releases
    • LIPScan 3D™ SDK
      • LIPScan 3D™ SDK
      • User Guide
      • SDK Download
      • Release Notes
      • Previous Releases
  • LIPSFace™ SDK
    • LIPSFace™ SDK
    • LIPSFace Overview
    • Changelog
  • LIPSFace™ HW120/125 On-Device 3D Facial Recognition
    • LIPSFace™ HW120/125 On-Device 3D Facial Recognition
    • User Guide
    • SDK Download
    • STEP files for CAD Use
  • LIPSFace™ HW110/115 On-Device 3D Facial Recognition
    • LIPSFace™ HW110/115 On-Device 3D Facial Recognition
    • User Guide & SDK Download
    • STEP files for CAD Use

LIPSMetric Documents

9
  • LIPSMetric™ Measure Master
    • User’s Manual
    • SDK Release
  • LIPSMetric™ VD115 Vehicle Dimensioner
    • LIPSMetric™ VD115 Vehicle Dimensioner
  • LIPSMetric™ ST115 Static Dimensioner
    • LIPSMetric™ ST115 Static Dimensioner
    • User’s Manual
  • LIPSMetric™ ST130 Pallet Dimensioner
    • LIPSMetric™ ST130 Pallet Dimensioner
    • User Guide
  • LIPSMetric™ HA110 Handheld Dimensioner
    • LIPSMetric™ HA110 Handheld Dimensioner
    • User’s Manual

Other LIPS Documents

1
  • LIPS License Management
    • LIPS License Management
View Categories
  • Home
  • LIPS® Developer Documentation
  • LIPSedge™ SDK 1.x
  • LIPSedge™ SDK Languages & Libraries
  • C++
  • measure

measure

Overview #

An interactive measurement tool that computes the real-world 3D distance between two user-selected points based on depth camera data.

Expected Output #

Picture4 | LIPS® Developer Documentation

Prerequisite #

  • OpenCV Viewer

Tutorial #

C++
error: 'clamp' is not a member of 'std'
  • This sample uses std::clamp, which was introduced in C++17.
  • If the project is compiled with C++14 or earlier, the compiler will report an error
C++
static inline Point mapColorToDepth(const Point& pColor)
{
    if (g_regAligned && g_colorSize == g_depthSize)
        return pColor;

    int dx = cvRound((double)pColor.x * g_depthSize.width / g_colorSize.width);
    int dy = cvRound((double)pColor.y * g_depthSize.height / g_colorSize.height);
    dx = std::clamp(dx, 0, g_depthSize.width - 1);
    dy = std::clamp(dy, 0, g_depthSize.height - 1);
    return Point(dx, dy);
}
  • Translates a pixel from color image space to depth image space.
  • Uses perfect mapping when Depth→Color registration is enabled; otherwise uses a simple proportional mapping as a best-effort approximation.
C++
bool depthPixelToWorldM(int dx, int dy, uint16_t depth_mm,
                        float& X, float& Y, float& Z)
{
    if (!g_depthStream) return false;
    if (depth_mm == 0) return false; // Invalid depth

    CoordinateConverter::convertDepthToWorld(*g_depthStream,
        static_cast<float>(dx), static_cast<float>(dy), static_cast<float>(depth_mm),
        &X, &Y, &Z);

    // Convert from mm to m
    X *= 0.001f; Y *= 0.001f; Z *= 0.001f;
    return true;
}
  • Converts a depth pixel (x,y) with depth (mm) into 3D coordinates (meters).
  • Uses OpenNI’s intrinsic model; assumes return units are mm, then scales to meters.
C++
static void onMouse(int event, int x, int y, int, void*)
{
    if (event == EVENT_LBUTTONDOWN)
    {
        if (g_lastDepth16.empty()) return;

        if (g_p1.x < 0) {
            g_p1 = Point(x, y);
            g_p2 = Point(-1, -1);
            g_lastDistM = -1.0;
        }
        else if (g_p2.x < 0) {
            g_p2 = Point(x, y);

            // Both points selected, compute distance
            Point d1 = mapColorToDepth(g_p1);
            Point d2 = mapColorToDepth(g_p2);

            uint16_t z1 = g_lastDepth16.at<uint16_t>(d1.y, d1.x);
            uint16_t z2 = g_lastDepth16.at<uint16_t>(d2.y, d2.x);

            float X1, Y1, Z1, X2, Y2, Z2;
            bool ok1 = depthPixelToWorldM(d1.x, d1.y, z1, X1, Y1, Z1);
            bool ok2 = depthPixelToWorldM(d2.x, d2.y, z2, X2, Y2, Z2);

            if (ok1 && ok2) {
                g_lastDistM = std::sqrt((X1 - X2) * (X1 - X2) +
                                        (Y1 - Y2) * (Y1 - Y2) +
                                        (Z1 - Z2) * (Z1 - Z2));
                cout << "Distance between points: " << g_lastDistM << " m" << endl;
            }
            else {
                g_lastDistM = -1.0;
                cout << "Invalid depth, unable to measure distance!" << endl;
            }
        }
        else {
            // Already had two points, start over when clicked again
            g_p1 = Point(x, y);
            g_p2 = Point(-1, -1);
            g_lastDistM = -1.0;
        }
    }
    else if (event == EVENT_RBUTTONDOWN)
    {
        // Right click: reset
        g_p1 = g_p2 = Point(-1, -1);
        g_lastDistM = -1.0;
    }
}
  • Handles user interaction: two left-clicks to measure 3D distance between points; right-click to reset.
Updated on 2026 年 4 月 1 日

grabcutsmotion
Table of Contents
  • Overview
  • Expected Output
  • Prerequisite
  • Tutorial

#LIPS

About Us

Store

Blog

Terms of Use

DEVELOPER

Technical Support

SDK Download

Code Samples

Github

Copyright © 2026 LIPS Corporation | Privacy Policy | Cookie Policy | Do Not Sell My Personal Information