当前位置: 首页 > news >正文

opencv C++ dnn模块调用yolov5以及Intel RealSense D435深度相机联合使用进行目标检测

一、代码

#include <opencv2/opencv.hpp>
#include <opencv2/dnn/dnn.hpp>
#include <librealsense2/rs.hpp> // Include RealSense Cross Platform APIusing namespace cv;
using namespace dnn;
using namespace std;
using namespace rs2;// 类名数组,这里需要替换为实际YOLO模型所检测的对象的类名
const char* classNames[] = {"object1", "object2", "object3", "object4"};int main(int argc, char** argv)
{// 模型权重和配置文件路径,这些文件包含了训练好的YOLO模型参数和网络配置String model = "yolov8.onnx";  // 替换为实际模型文件路径// 加载预训练的模型和配置到DNN网络中Net net = readNetFromONNX(model);// 设置推理引擎后端为OpenCV,目标设备为CPUnet.setPreferableBackend(DNN_BACKEND_OPENCV);net.setPreferableTarget(DNN_TARGET_CPU);// Declare depth colorizer for pretty visualization of depth datacolorizer color_map;// Declare RealSense pipeline, encapsulating the actual device and sensorspipeline p;// Start streaming with default recommended configurationp.start();// 循环直到用户按下键盘上的任意键while (waitKey(1) < 0) {// Wait for the next set of frames from the cameraframeset frames = p.wait_for_frames();// Get a frame from the RGB cameraframe color = frames.get_color_frame();// Create OpenCV matrix of size (color_height, color_width)Mat frame(Size(640, 480), CV_8UC3, (void*)color.get_data(), Mat::AUTO_STEP);Mat blob;   // 用于存储处理后的图像,以适应网络输入// 将帧图像转换为网络输入所需格式blobFromImage(frame, blob, 1/255.0, cv::Size(416, 416), Scalar(0,0,0), true, false);// 将blob设置为网络的输入net.setInput(blob);// 运行前向传递以获取网络的输出层vector<Mat> outs;net.forward(outs, net.getUnconnectedOutLayersNames());// 遍历网络输出的每一层结果for (size_t i = 0; i < outs.size(); ++i) {for (int j = 0; j < outs[i].rows; ++j) {Mat scores = outs[i].row(j).colRange(5, outs[i].cols);Point classIdPoint;double confidence;minMaxLoc(scores, 0, &confidence, 0, &classIdPoint);if (confidence > 0.5) {int centerX = (int)(outs[i].at<float>(j, 0) * frame.cols);int centerY = (int)(outs[i].at<float>(j, 1) * frame.rows);int width = (int)(outs[i].at<float>(j, 2) * frame.cols);int height = (int)(outs[i].at<float>(j, 3) * frame.rows);int left = centerX - width / 2;int top = centerY - height / 2;rectangle(frame, Rect(left, top, width, height), Scalar(0, 255, 0), 2);int classIdx = static_cast<int>(classIdPoint.x);string classLabel = string(classNames[classIdx]);string label = classLabel + ":" + format("%.2f", confidence);int baseLine;Size labelSize = getTextSize(label, FONT_HERSHEY_SIMPLEX, 0.5, 1, &baseLine);top = max(top, labelSize.height);rectangle(frame, Point(left, top - labelSize.height), Point(left + labelSize.width, top + baseLine), Scalar::all(255), FILLED);putText(frame, label, Point(left, top), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0,0,0));}}}// 展示处理后的帧imshow("YoloV8", frame);}return 0;
}

注意:由于手头上没有该摄像头,本人只是查询资料,以及文档之后写的代码,并没有实操

二、安装包

需要安装opencv、librealsense2库

链接:Intel.RealSense.SDK.zip资源-CSDN文库

http://www.lryc.cn/news/296325.html

相关文章:

  • 2024牛客寒假算法基础集训营1(视频讲解全部题目)
  • 第三百一十三回
  • 倒计时61天
  • npm后Truffle找不到命令(ubantu20系统)
  • 嵌入式学习第三篇——51单片机
  • RabbitMQ详解
  • CGAL::2D Arrangements-4
  • 终端命令提示符:如何查看我们电脑端口是否被占用和处理方式
  • elasticsearch重置密码操作
  • 从零开始手写mmo游戏从框架到爆炸(零)—— 导航
  • 机器学习7-K-近邻算法(K-NN)
  • 相机图像质量研究(7)常见问题总结:光学结构对成像的影响--镜片固化
  • 猫头虎分享已解决Bug || Go Error: cannot convert int to string
  • 前端bug手册
  • Elasticsearch中Document Routing特性
  • 【Git版本控制 03】远程操作
  • 【Git】Windows下通过Docker安装GitLab
  • flutter 操作mysql
  • c++阶梯之类与对象(中)< 续集 >
  • GitLag所有操作-汇总
  • JSch - 配置SFTP服务器SSH免密登录
  • RISC-V指令格式
  • Linux 文件比较工具
  • 【GAMES101】Lecture 17 材质
  • 数模.matlab画图
  • [word] word表格表头怎么取消重复出现? #媒体#笔记#职场发展
  • vue项目开发vscode配置
  • BUUCTF-Real-[Tomcat]CVE-2017-12615
  • Qt应用软件【协议篇】http协议get、post示例
  • 如何选择Centos的替代者