This commit is contained in:
2026-01-09 13:59:10 +08:00
commit 336a19762a
378 changed files with 99177 additions and 0 deletions

View File

@@ -0,0 +1,18 @@
# Copyright (c) Orbbec Inc. All Rights Reserved.
# Licensed under the MIT License.
cmake_minimum_required(VERSION 3.5)
project(ob_infrared)
add_executable(${PROJECT_NAME} infrared.cpp)
set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 11)
target_link_libraries(${PROJECT_NAME} ob::OrbbecSDK ob::examples::utils)
set_target_properties(${PROJECT_NAME} PROPERTIES FOLDER "examples")
if(MSVC)
set_target_properties(${PROJECT_NAME} PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}")
endif()
install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION bin)

View File

@@ -0,0 +1,59 @@
# C++ Sample: 1.stream.infrared
## Overview
Use the SDK interface to obtain the camera IR stream and display it in the window
### Knowledge
Pipeline is a pipeline for processing data streams, providing multi-channel stream configuration, switching, frame aggregation, and frame synchronization functions.
## code overview
1. Configure IR sensor related information and enable the IR stream.You must configure this before calling pipe.start().
```cpp
// Get the device from pipeline.
std::shared_ptr<ob::Device> device = pipe.getDevice();
// Get the sensor list from device.
std::shared_ptr<ob::SensorList> sensorList = device->getSensorList();
// Create a config for pipeline.
std::shared_ptr<ob::Config> config = std::make_shared<ob::Config>();
for(uint32_t index = 0; index < sensorList->getCount(); index++) {
// Query all supported infrared sensor type and enable the infrared stream.
// For dual infrared device, enable the left and right infrared streams.
// For single infrared device, enable the infrared stream.
OBSensorType sensorType = sensorList->getSensorType(index);
if(sensorType == OB_SENSOR_IR || sensorType == OB_SENSOR_IR_LEFT || sensorType == OB_SENSOR_IR_RIGHT) {
// Enable the stream with specified profile;
config->enableVideoStream(sensorType, OB_WIDTH_ANY, OB_HEIGHT_ANY, 30, OB_FORMAT_ANY);
}
}
```
2. Open the window and output the IR stream
```cpp
ob_smpl::CVWindow win("Infrared", 1280, 720, ob_smpl::ARRANGE_ONE_ROW);
while(win.run()) {
// Wait for up to 100ms for a frameset in blocking mode.
auto frameSet = pipe.waitForFrameset(100);
if(frameSet == nullptr) {
continue;
}
// Render a set of frame in the window.
win.pushFramesToView(frameSet);
}
```
## Run Sample
Press the Esc key in the window to exit the program.
### Result
![image](../../docs/resource/infrared.jpg)

View File

@@ -0,0 +1,65 @@
// Copyright (c) Orbbec Inc. All Rights Reserved.
// Licensed under the MIT License.
#include <libobsensor/ObSensor.hpp>
#include "utils.hpp"
#include "utils_opencv.hpp"
std::map<OBSensorType, ob_stream_type> sensorStreamMap = {
{OB_SENSOR_IR, OB_STREAM_IR},
{OB_SENSOR_IR_LEFT, OB_STREAM_IR_LEFT},
{OB_SENSOR_IR_RIGHT, OB_STREAM_IR_RIGHT}
};
int main() try {
// Create a pipeline with default device.
ob::Pipeline pipe;
// Get the device from pipeline.
std::shared_ptr<ob::Device> device = pipe.getDevice();
// Get the sensor list from device.
std::shared_ptr<ob::SensorList> sensorList = device->getSensorList();
// Create a config for pipeline.
std::shared_ptr<ob::Config> config = std::make_shared<ob::Config>();
for(uint32_t index = 0; index < sensorList->getCount(); index++) {
// Query all supported infrared sensor type and enable the infrared stream.
// For dual infrared device, enable the left and right infrared streams.
// For single infrared device, enable the infrared stream.
OBSensorType sensorType = sensorList->getSensorType(index);
if(sensorType == OB_SENSOR_IR || sensorType == OB_SENSOR_IR_LEFT || sensorType == OB_SENSOR_IR_RIGHT) {
// Enable the stream with specified profile;
config->enableVideoStream(sensorType, OB_WIDTH_ANY, OB_HEIGHT_ANY, OB_FPS_ANY, OB_FORMAT_ANY);
}
}
pipe.start(config);
// Create a window for rendering and set the resolution of the window
ob_smpl::CVWindow win("Infrared", 1280, 720, ob_smpl::ARRANGE_ONE_ROW);
while(win.run()) {
// Wait for up to 100ms for a frameset in blocking mode.
auto frameSet = pipe.waitForFrameset(100);
if(frameSet == nullptr) {
continue;
}
// Render a set of frame in the window.
win.pushFramesToView(frameSet);
}
// Stop the pipeline, no frame data will be generated
pipe.stop();
return 0;
}
catch(ob::Error &e) {
std::cerr << "function:" << e.getFunction() << "\nargs:" << e.getArgs() << "\nmessage:" << e.what() << "\ntype:" << e.getExceptionType() << std::endl;
std::cout << "\nPress any key to exit.";
ob_smpl::waitForKeyPressed();
exit(EXIT_FAILURE);
}