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

news/2024/10/18 11:49:47/

在奥比中光提供的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/news/1539991.html

相关文章

【AIGC】AI如何匹配RAG知识库: Embedding实践,语义搜索

引言 RAG作为减少模型幻觉和让模型分析、回答私域相关知识最简单高效的方式&#xff0c;我们除了使用之外可以尝试了解其是如何实现的。在实现RAG的过程中Embedding是非常重要的手段。本文将带你简单地了解AI工具都是如何通过Embedding去完成语义分析匹配的。 Embedding技术简…

第三季度中国游戏市场收入创历史新高;京东物流与淘宝天猫达成合作;YouTube 上线“用相机拍摄”标签....|网易数智日报

第三季度中国游戏市场收入917.66亿&#xff0c;创历史新高 中国音数协游戏工委今日发布了最新的 2024 年第三季度中国游戏产业季度报告。 数据显示&#xff0c;2024 年第三季度中国游戏市场收入 917.66 亿元&#xff0c;环比增长 22.96%&#xff0c;同比增长 8.95%。 中国音…

智联云采 SRM2.0 testService SQL注入漏洞复现

0x01 产品简介 智联云采是一款针对企业供应链管理难题及智能化转型升级需求而设计的解决方案,针对企业供应链管理难题,及智能化转型升级需求,智联云采依托人工智能、物联网、大数据、云等技术,通过软硬件系统化方案,帮助企业实现供应商关系管理和采购线上化、移动化、智能…

在 WPF 中使用 OpenTK:从入门到进阶

一、引言 WPF&#xff08;Windows Presentation Foundation&#xff09;是微软推出的用于创建丰富的桌面应用程序用户界面的框架。OpenTK 则为我们提供了强大的图形处理能力&#xff0c;包括 3D 图形渲染、数学计算等功能。将两者结合起来&#xff0c;可以在 WPF 应用程序中实…

兰迪·舍克曼担任生命银行链(LBC)顾问,赋能基因数据技术发展

兰迪舍克曼&#xff08;Randy Schekman&#xff09;作为生命银行链&#xff08;Life Bank Chain, LBC&#xff09;的顾问参与其中&#xff0c;这无疑是个令人兴奋的消息&#xff01;他在生理医学和基因研究方面拥有深厚的专业知识&#xff0c;必将对LBC的使命&#xff0c;即安全…

BGP(边界网关协议)

1、网络AS&#xff08;自治系统&#xff09; 边界网关协议BGP&#xff08;Border Gateway Protocol&#xff09;是一种实现自治系统AS&#xff08;Autonomous System&#xff09;之间的路由可达&#xff0c;并选择最佳路由的距离矢量路由协议。 AS是指在一个实体管辖下的拥有…

【后端开发】自动化部署、服务管理、问题排查工具(cicd流水线,k8s集群,ELK日志)

【后端开发】自动化部署、服务管理、问题排查工具&#xff08;cicd流水线&#xff0c;k8s集群&#xff0c;ELK日志&#xff09; 文章目录 1、Devops与CICD流水线(TeamCity, Jenkins&#xff0c;GitHub Actions)2、Kubernetes 集群的管理和操作&#xff08;对比Portainer&#x…

Unity网络开发基础 —— 实践小项目

概述 接Unity网络开发基础 导入基础知识中的代码 需求分析 手动写Handler类 手动书写消息池 using GamePlayer; using System; using System.Collections; using System.Collections.Generic; using UnityEngine;/// <summary> /// 消息池中 主要是用于 注册 ID和消息类…