奥比中光opencv显示可见光图片

server/2024/10/19 13:21:00/

在奥比中光提供的sdk中没有直接使用opencv读取显示视频流的功能,参照案例与代码写了一个opencv显示奥比中光可见光流的cpp代码

代码:


#include "libobsensor/hpp/Pipeline.hpp"
#include "libobsensor/hpp/Error.hpp"const char *metaDataTypes[] = { "TIMESTAMP","SENSOR_TIMESTAMP","FRAME_NUMBER","AUTO_EXPOSURE","EXPOSURE","GAIN","AUTO_WHITE_BALANCE","WHITE_BALANCE","BRIGHTNESS","CONTRAST","SATURATION","SHARPNESS","BACKLIGHT_COMPENSATION","HUE","GAMMA","POWER_LINE_FREQUENCY","LOW_LIGHT_COMPENSATION","MANUAL_WHITE_BALANCE","ACTUAL_FRAME_RATE","FRAME_RATE","AE_ROI_LEFT","AE_ROI_TOP","AE_ROI_RIGHT","AE_ROI_BOTTOM","EXPOSURE_PRIORITY","HDR_SEQUENCE_NAME","HDR_SEQUENCE_SIZE","HDR_SEQUENCE_INDEX","LASER_POWER","LASER_POWER_LEVEL","LASER_STATUS","GPIO_INPUT_DATA" };int main(int argc, char **argv) try {// Create a pipeline with default deviceob::Pipeline pipe;// Configure which streams to enable or disable for the Pipeline by creating a Configstd::shared_ptr<ob::Config> config = std::make_shared<ob::Config>();config->enableVideoStream(OB_STREAM_COLOR);// Start the pipeline with configpipe.start(config);auto currentProfile = pipe.getEnabledStreamProfileList()->getProfile(0)->as<ob::VideoStreamProfile>();cv::Mat                                 rstMat;// Create a window for rendering, and set the resolution of the windowwhile(1) {// Wait for up to 100ms for a frameset in blocking mode.auto frameSet = pipe.waitForFrames(1000);if(frameSet == nullptr) {continue;}// get color frame from framesetauto colorFrame = frameSet->colorFrame();if(colorFrame == nullptr) {continue;}if(colorFrame->type() == OB_FRAME_COLOR) {auto videoFrame = colorFrame->as<ob::VideoFrame>();switch(videoFrame->format()) {case OB_FORMAT_MJPG: {cv::Mat rawMat(1, videoFrame->dataSize(), CV_8UC1, videoFrame->data());rstMat = cv::imdecode(rawMat, 1);} break;case OB_FORMAT_NV21: {cv::Mat rawMat(videoFrame->height() * 3 / 2, videoFrame->width(), CV_8UC1, videoFrame->data());cv::cvtColor(rawMat, rstMat, cv::COLOR_YUV2BGR_NV21);} break;case OB_FORMAT_YUYV:case OB_FORMAT_YUY2: {cv::Mat rawMat(videoFrame->height(), videoFrame->width(), CV_8UC2, videoFrame->data());cv::cvtColor(rawMat, rstMat, cv::COLOR_YUV2BGR_YUY2);} break;case OB_FORMAT_RGB: {cv::Mat rawMat(videoFrame->height(), videoFrame->width(), CV_8UC3, videoFrame->data());cv::cvtColor(rawMat, rstMat, cv::COLOR_RGB2BGR);} break;case OB_FORMAT_RGBA: {cv::Mat rawMat(videoFrame->height(), videoFrame->width(), CV_8UC4, videoFrame->data());cv::cvtColor(rawMat, rstMat, cv::COLOR_RGBA2BGRA);} break;case OB_FORMAT_BGRA: {rstMat = cv::Mat(videoFrame->height(), videoFrame->width(), CV_8UC4, videoFrame->data());} break;case OB_FORMAT_UYVY: {cv::Mat rawMat(videoFrame->height(), videoFrame->width(), CV_8UC2, videoFrame->data());cv::cvtColor(rawMat, rstMat, cv::COLOR_YUV2BGR_UYVY);} break;case OB_FORMAT_I420: {cv::Mat rawMat(videoFrame->height() * 3 / 2, videoFrame->width(), CV_8UC1, videoFrame->data());cv::cvtColor(rawMat, rstMat, cv::COLOR_YUV2BGR_I420);} break;default:break;}}cv::imshow("ccc",rstMat);cv::waitKey(100);// Render frameset in the window, only color frames are rendered here.}// Stop the Pipeline, no frame data will be generatedpipe.stop();return 0;
}
catch(ob::Error &e) {std::cerr << "function:" << e.getName() << "\nargs:" << e.getArgs() << "\nmessage:" << e.getMessage() << "\ntype:" << e.getExceptionType() << std::endl;exit(EXIT_FAILURE);
}

http://www.ppmy.cn/server/133050.html

相关文章

iTOP-RK3568开发板独立NPU通过算法加特应用到以下的场景

iTOP-3568开发板采用瑞芯微RK3568处理器&#xff0c;内部集成了四核64位Cortex-A55处理器。主频高达2.0Ghz&#xff0c;RK809动态调频。集成了双核心架构GPU&#xff0c;ARM G52 2EE、支持OpenGLES1.1/2.0/3.2、OpenCL2.0、Vulkan1.1、内嵌高性能2D加速硬件。 内置独立NPU,算力…

Ts里联合类型和交叉类型,枚举类型,父子组件生命周期钩子函数执行顺序,setup函数和script setup语法糖,rightreduce+reverse

目录 1 Ts里联合类型和交叉类型 type和interface编译后都消失了 interface 可以extends type&#xff0c;同时type也可以与interface类型交叉 class能够通过implements实现接口或类型别名&#xff0c;但是被认为是静态的&#xff0c;不能实现/扩展命名联合类型的类型别名 …

idea-java序列化serialversionUID自动生成

&#x1f496;简介 java.io.Serializable 是 Java 中的一个标记接口&#xff08;marker interface&#xff09;&#xff0c;它没有任何方法或字段。当一个类实现了 Serializable 接口&#xff0c;那么这个类的对象就可以被序列化和反序列化。序列化是将对象的状态转换为字节流…

C++基础

C 进一步扩充和完善了 C 语言&#xff0c;像Java一样它也是一种面向对象的程序设计语言。 上一篇&#xff1a;C语言基础 1. 程序结构 让我们逐帧分析 #include <iostream> using namespace std;// main() 是程序开始执行的地方int main() {cout << "Hello …

【Jenkins】2024 最新版本的 Jenkins 权限修改为 root 用户启动,解决 permission-denied 报错问题

最新版本的 Jenkins 修改 /etc/sysconfig/jenkins 中的 JENKINS_USERroot不会再生效&#xff0c;需要按照以下配置进行操作&#xff1a; vim /usr/lib/systemd/system/jenkins.service然后重启就可以了 systemctl daemon-reload # 重新加载 systemd 的配置文件 systemctl res…

集成电路学习:什么是USB通用串行总线

USB&#xff1a;通用串行总线 USB&#xff0c;全称Universal Serial Bus&#xff08;通用串行总线&#xff09;&#xff0c;是一种外部总线标准&#xff0c;用于规范电脑与外部设备的连接和通讯。以下是关于USB的详细介绍&#xff1a; 一、USB的定义与特点 USB的定义&#xff…

Vue 3中集成Element Plus组件库

文章目录 一、Element Plus简介二、安装Element Plus2.1 安装Element Plus2.2 引入Element Plus三、使用Element Plus组件3.1 创建组件3.2 组件引入四、总结随着前端开发的快速发展,组件库已经成为开发实践中不可或缺的部分。 Vue 3作为一个现代的 JavaScript框架,其灵活性…

大数据-172 Elasticsearch 索引操作 与 IK 分词器 自定义停用词 Nginx 服务

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…