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

WSL2 ubuntu子系统OpenCV调用本机摄像头的RTSP视频流做开发测试

文章目录

  • 前言
  • 一、Ubuntu安装opencv库
  • 二、启动 Windows 本机的 RTSP 视频流
    • 下载解压 EasyDarwin
    • 查看本机摄像头设备
    • 开始推流
  • 三、在ubuntu 终端编写代码
    • 创建目录及文件
    • 创建CMakeLists.txt文件
    • 启动 cmake 配置并构建
  • 四、结果展示
    • 启动图形界面
    • 在图形界面打开终端找到 rtsp_demo运行

前言

由于WSL2环境与主机系统隔离,访问本机摄像头是有限的,但是,可以通过第三方库或网络摄像头来解决这个问题,本文将本地摄像头通过rtsp流来给WSL2访问。

一、Ubuntu安装opencv库

详见链接:https://blog.csdn.net/weixin_46119406/article/details/132271955?spm=1001.2014.3001.5501

二、启动 Windows 本机的 RTSP 视频流

Easydarwin是国内团队开发的开源流媒体框架。它是基于Go语言研发,从2012年12月创建并发展至今,从原有的单服务的流媒体服务器形式,扩展成现在的云平台架构开源项目,属于高性能开源RTSP流媒体服务器,在Github上受到广大欢迎。

特点:RTSP推模式转发、RTSP拉模式转发、录像、检索、回放、关键帧缓存、秒开画面、RESTful接口、WEB后台管理、分布式负载均衡。

下载解压 EasyDarwin

下载解压 release 包
直接运行 EasyDarwin.exe

以 Ctrl + C 停止服务。打开浏览器输入 http://localhost:10008, 进入控制页面,默认用户名密码是admin/admin

查看本机摄像头设备

打开PowerShell输入以下命令

ffmpeg -list_devices true -f dshow -i dummy

在这里插入图片描述

开始推流

ffmpeg -f dshow -i video="HP HD Camera" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -rtsp_transport tcp -f rtsp rtsp://10.25.184.33/test

参数解释

-f dshow -i video=“摄像头名称” 指定从本地摄像头中读取视频流。将“摄像头名称”替换为您的摄像头名称,例如“HP HD Camera”。
-vcodec libx264 指定使用 x264 编码器进行视频编码。
-preset ultrafast 设置编码速度。这里使用的是最快的编码速度,但可能会导致视频质量下降。
-tune zerolatency 设置编码器以实现零延迟。
-f rtsp 指定输出流的格式为 RTSP。
rtsp://<IP地址>/<路径> 指定 RTSP 流的目标地址。请将 <IP地址> 替换为 Windows 本机 IP 地址,将 <路径> 替换为您想要为流指定的路径。
成功推流如下,注意保持控制台的运行
在这里插入图片描述

三、在ubuntu 终端编写代码

创建目录及文件

mkdir  -p rtsp_demo/src
cd rtsp_demo/src
touch main.cpp

编辑main.cpp

vi main.cpp

代码如下

#include <opencv2/opencv.hpp>
#include <iostream>
#include <string>int main(int argc, char **argv)
{// Ubuntu安装ffmpeg:sudo apt-get install ffmpeg// rtsp地址,模拟四路视频流进行展示std::string rtsp1 = "rtsp://172.27.148.34/test";std::string rtsp2 = rtsp1;std::string rtsp3 = rtsp1;std::string rtsp4 = rtsp1;// CAP_FFMPEG:使用ffmpeg解码cv::VideoCapture stream1 = cv::VideoCapture(rtsp1, cv::CAP_FFMPEG);cv::VideoCapture stream2 = cv::VideoCapture(rtsp2, cv::CAP_FFMPEG);cv::VideoCapture stream3 = cv::VideoCapture(rtsp3, cv::CAP_FFMPEG);cv::VideoCapture stream4 = cv::VideoCapture(rtsp4, cv::CAP_FFMPEG);if (!stream1.isOpened() || !stream2.isOpened() || !stream3.isOpened() || !stream4.isOpened()){std::cout << "有视频流未打开" << std::endl;return -1;}cv::Mat frame1;cv::Mat frame2;cv::Mat frame3;cv::Mat frame4;cv::Mat H1, H2, V, blur;// 使用namedWindow创建窗口,WINDOW_AUTOSIZE:自动调整窗口大小cv::namedWindow("rtsp_demo", cv::WINDOW_AUTOSIZE);while (true){if (!stream1.read(frame1) || !stream2.read(frame2) || !stream3.read(frame3) || !stream4.read(frame4)){std::cout << "有视频流未读取" << std::endl;continue;}// 缩放等处理cv::resize(frame1, frame1, cv::Size(500, 300));cv::resize(frame2, frame2, cv::Size(500, 300));cv::flip(frame2, frame2, 1);cv::resize(frame3, frame3, cv::Size(500, 300));cv::cvtColor(frame1, frame1, cv::COLOR_BGR2GRAY);cv::cvtColor(frame1, frame1, cv::COLOR_GRAY2BGR);cv::resize(frame4, frame4, cv::Size(500, 300));cv::putText(frame4, "RTSP demo", cv::Point(100, 100), cv::FONT_ITALIC, 1, cv::Scalar(0, 0, 255), 2);// 拼接cv::hconcat(frame1, frame2, H1);cv::hconcat(frame3, frame4, H2);cv::vconcat(H1, H2, V);// 高斯模糊一下cv::GaussianBlur(V, blur, cv::Size(25, 25), 0);cv::imshow("rtsp_demo", blur);if (cv::waitKey(1) == 27){break;}}return 0;
}

创建CMakeLists.txt文件

cd ../
touch CMakeLists.txt
vi CMakeLists.txt

代码如下:

# 最低版本要求
cmake_minimum_required(VERSION 3.10)# 项目信息
project(rtsp_demo)# 添加opencv库
find_package(OpenCV REQUIRED)# 添加头文件
include_directories(${OpenCV_INCLUDE_DIRS})
# 添加库文件
link_libraries(${OpenCV_LIBS})# 添加可执行程序
add_executable(rtsp_demo src/main.cpp)

启动 cmake 配置并构建

cmake -S . -B build 
cmake --build build 

此时会生成可执行文件 rtsp_demo

四、结果展示

启动图形界面

参见链接 https://blog.csdn.net/weixin_46119406/article/details/132269782?spm=1001.2014.3001.5501

在图形界面打开终端找到 rtsp_demo运行

./rtsp_demo

在这里插入图片描述

相关文章:

WSL2 ubuntu子系统OpenCV调用本机摄像头的RTSP视频流做开发测试

文章目录 前言一、Ubuntu安装opencv库二、启动 Windows 本机的 RTSP 视频流下载解压 EasyDarwin查看本机摄像头设备开始推流 三、在ubuntu 终端编写代码创建目录及文件创建CMakeLists.txt文件启动 cmake 配置并构建 四、结果展示启动图形界面在图形界面打开终端找到 rtsp_demo运…...

20230814让惠普(HP)锐14 新AMD锐龙电脑不联网进WIN11进系统

20230814让惠普(HP)锐14 新AMD锐龙电脑不联网进WIN11进系统 2023/8/14 17:19 win11系统无法跳过联网 https://www.xpwin7.com/jiaocheng/28499.html Win11开机联网跳过不了怎么办&#xff1f;Win11开机联网跳过不了解决方法 Win11开机联网跳过不了怎么办&#xff1f;Win11开机…...

基于ScrollView的下拉刷新

基于ScrollView的下拉刷新 组件使用 组件 import React, {useState} from react; import {ScrollView, RefreshControl, Platform} from react-native;const RefreshComponent ({children, onRefresh, onScroll}) > {const [refreshing, setRefreshing] useState(false);…...

强训第31天

选择 传输层叫段 网络层叫包 链路层叫帧 A 2^16-2 C D C 70都没收到&#xff0c;确认号代表你该从这个号开始发给我了&#xff0c;所以发70而不是71 B D C 248&123120 OSI 物理层 数据链路层 网络层 传输层 会话层 表示层 应用层 C 记一下304读取浏览器缓存 502错误网关 编…...

什么是Java中的策略模式?

Java中的策略模式是一种行为设计模式&#xff0c;它允许您在不改变客户端代码的情况下&#xff0c;在运行时动态地切换行为。这是一种非常有用的模式&#xff0c;因为它允许您在运行时根据需要更改算法或行为。 策略模式通常涉及到一个或多个策略类&#xff0c;每个策略类都实…...

【Visual Studio Code】--- Win11 安装 VS Code 超详细

Win11 安装 VS Code 超详细 概述一、下载 Vscode二、安装 Vscode 概述 一个好的文章能够帮助开发者完成更便捷、更快速的开发。书山有路勤为径&#xff0c;学海无涯苦作舟。我是秋知叶i、期望每一个阅读了我的文章的开发者都能够有所成长。 一、下载 Vscode Vscode官网 二、…...

每天一道leetcode:797. 所有可能的路径(图论中等深度优先遍历)

今日份题目&#xff1a; 给你一个有 n 个节点的 有向无环图&#xff08;DAG&#xff09;&#xff0c;请你找出所有从节点 0 到节点 n-1 的路径并输出&#xff08;不要求按特定顺序&#xff09; graph[i] 是一个从节点 i 可以访问的所有节点的列表&#xff08;即从节点 i 到节…...

创建预留成本中心与指定工厂不一致

创建预留成本中心与指定工厂不一致 这种情况SAP会警告提示&#xff0c;可以强制通过。 如果公司不允许跨公司领料&#xff0c;可以将消息号 M7517的类型从W改为为E tcode&#xff1a;OMCQ SPRO->物料管理->库存管理和实际库存->定义系统消息的属性->系统信息设置...

SCF金融公链新加坡启动会 创新驱动未来

新加坡迎来一场引人瞩目的金融科技盛会&#xff0c;SCF金融公链启动会于2023年8月13日盛大举行。这一受瞩目的活动将为金融科技领域注入新的活力&#xff0c;并为广大投资者、合作伙伴以及关注区块链发展的人士提供一个难得的交流平台。 在SCF金融公链启动会上&#xff0c; Wil…...

希尔排序【Java算法】

文章目录 1. 概念2. 思路3. 代码实现 1. 概念 希尔排序也是一种插入排序&#xff0c;它是简单插入排序经过改进之后的一个更高效的版本&#xff0c;也称为缩小增量排序。希尔排序在数组中采用跳跃式分组的策略&#xff0c;通过某个增量将数组元素划分为若干组&#xff0c;然后分…...

互联网发展历程:从布线到无线,AC/AP的崭新时代

互联网的发展&#xff0c;一直在追求更便捷、更灵活的连接方式。在网络的早期&#xff0c;布线问题常常让人头疼。一项革命性的技术应运而生&#xff0c;那就是“无线AC/AP”。 布线问题的烦恼&#xff1a;繁琐的布线 早期网络的布线工作常常耗费时间和精力&#xff0c;尤其在大…...

Vue3 Axios网络请求简单应用

cd 到项目 安装Axios&#xff1a;cnpm install --save axios post传递参数 需要安装querystring 用于转换参数格式&#xff1a;cnpm install --save querystring 运行示例&#xff1a; 后台接口&#xff1a; GetTestData.java package com.csdnts.api;import java.io.IOExce…...

day-18 代码随想录算法训练营(19)二叉树 part05

513.找树左下角的值 思路一&#xff1a;层序遍历&#xff0c;每一层判断是不是最后一层&#xff0c;是的话直接返回第一个; 如何判断是不是最后一层呢&#xff0c;首先队列头部&#xff0c;其次记录左右子节点都没有的节点数是不是等于que.size()&#xff1b;或…...

【数据结构OJ题】移除链表元素

原题链接&#xff1a;https://leetcode.cn/problems/remove-linked-list-elements/description/ 1. 题目描述 2. 思路分析 我们可以定义一个结构体指针变量cur&#xff0c;让cur一开始指向头结点&#xff0c;同时定义一个结构体指针prev&#xff0c;令prev初始化为空指针NULL…...

centos 安装 virtualbox

参考 https://phoenixnap.com/kb/how-to-install-virtualbox-centos-7 遇到 Gpg Keys Failue 这样解决 将 rpm 包下载到本地 –disablerepovirtualbox sudo yum --disablerepovirtualbox localinstall VirtualBox-7.0-7.0.10_158379_el7-1.x86_64 failure: repodata/repomd…...

Java8之Optional类的基本使用

文章目录 一、简介二、常见的Optional用法&#xff1a;1、创建Optional对象&#xff1a;1.1 使用of()方法&#xff1a;1.2 使用ofNullable()方法&#xff1a;1.3 使用empty()方法&#xff1a; 2、判断Optional是否包含值&#xff1a;2.1 使用isPresent()方法&#xff1a; 3、获…...

LinuxPTP时间同步

参考文献&#xff1a; http://linuxptp.sourceforge.net/ 0、硬件支持 查看网卡是否支持软硬件时间戳&#xff1a; sudo ethtool -T eno1 Time stamping parameters for eno1: Time stamping parameters for eno1: Capabilities: hardware-transmit (SOF_TIMESTAMPIN…...

【Django】Task1安装python环境及运行项目

【Django】Task1安装python环境及运行项目 写在最前 8月份Datawhale组队学习&#xff0c;在这个群除我佬的时代&#xff0c;写一下blog记录学习过程。 参考资源&#xff1a; 学习项目github&#xff1a;https://github.com/Joe-2002/sweettalk-django4.2 队长博客&#xff1a…...

00 - 环境配置

查看所有文章链接&#xff1a;&#xff08;更新中&#xff09;GIT常用场景- 目录 文章目录 1. 环境说明2. 安装配置2.1 配置user信息2.2 config的三个作用域 3. 建git仓库3.1 把已有的项目代码纳入git管理3.2 新建的项目直接用git管理3.3 配置local的user和email3.4 优先级&…...

R语言实现计算净重新分类指数(NRI)和综合判别改善指数(IDI)

两个模型比较&#xff0c;与第一个模型相比&#xff0c;NRI&#xff08;重新分对的 - 重新分错的&#xff09;/总人数。IDI&#xff08;新模型患者平均预测概率-旧模型患者平均预测概率&#xff09;-&#xff08;新模型非患者平均预测概率-旧模型非患者平均预测概率&#xff09…...

Taotoken用量看板如何帮助团队管理API成本

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Taotoken用量看板如何帮助团队管理API成本 对于团队技术负责人或项目管理者而言&#xff0c;在引入大模型能力后&#xff0c;一个核…...

数据治理:数据质量与元数据管理

数据治理&#xff1a;数据质量与元数据管理 大家好&#xff0c;我是欧阳瑞&#xff08;Rich Own&#xff09;。今天想和大家聊聊数据治理这个重要话题。作为一个全栈开发者&#xff0c;数据治理是确保数据资产价值的关键。今天就来分享一下数据质量和元数据管理的实战经验。 数…...

GoogleTranslate_IPFinder高级功能详解:自定义IP段扫描与在线同步服务

GoogleTranslate_IPFinder高级功能详解&#xff1a;自定义IP段扫描与在线同步服务 【免费下载链接】GoogleTranslate_IPFinder 谷歌翻译API服务器的IP扫描、测速工具。 项目地址: https://gitcode.com/gh_mirrors/go/GoogleTranslate_IPFinder GoogleTranslate_IPFinder…...

麦嘉昕商城软件开发(模式介绍)

编辑&#xff1a;SJ520it黄华麦嘉昕商城软件开发麦嘉昕商城是一个综合性电商平台&#xff0c;涉及商品展示、交易、支付、物流等功能。开发此类系统需要前端、后端、数据库及第三方服务&#xff08;如支付、短信&#xff09;的集成。技术栈建议&#xff1a;前端&#xff1a;Vue…...

观察性研究混杂偏倚控制【9天实用统计学公益训练营Day3-1】

关注公众号的朋友都知道&#xff0c;郑老师我之前连续4年开设了“30天学会医学统计学”&#xff0c;从理论到实操&#xff0c;一步一步教会大家统计学、SPSS课程。2026年&#xff0c;我们对这门课程进行全新升级&#xff01;课程时间大幅度缩短&#xff0c;内容大幅度提升&…...

Java 面向对象 - 触发类的初始化,执行其中的 static 块(包含不会触发初始化的情况)

触发类的初始化&#xff0c;执行其中的 static 块 访问 static 字段 public class SomeClass {static {System.out.println("static block executed");}public static int num 100; }int num SomeClass.num;访问 static 方法&#xff0c;可以使用空方法&#xff08…...

蒙特卡洛学习:基于完整轨迹的无偏强化学习方法

1. 这不是数学推导课&#xff0c;而是一次“试错式决策”的实战复盘你有没有过这种体验&#xff1a;第一次进一家陌生餐厅&#xff0c;菜单没看懂&#xff0c;服务员语速太快&#xff0c;你点完菜后心里直打鼓——这道招牌菜到底合不合口味&#xff1f;等上菜、尝第一口、皱眉或…...

根据(2022年版课程标准修订)义务教育教科书·七至八年级生物课程内容体系,直接打印快速记忆

七年级生物目录&#xff08;上册&#xff09;第一单元 生物和细胞第一章 认识生物第一节 观察周边环境中的生物第二节 生物的特征第二章 认识细胞第一节 学习使用显微镜第二节 植物细胞第三节 动物细胞第四节 细胞的生活第三章 从细胞到生物体第一节 细胞通过分裂产生新细胞第二…...

ColabFold终极指南:5分钟免费预测蛋白质三维结构

ColabFold终极指南&#xff1a;5分钟免费预测蛋白质三维结构 【免费下载链接】ColabFold Making Protein folding accessible to all! 项目地址: https://gitcode.com/gh_mirrors/co/ColabFold 想要探索蛋白质的神秘世界却苦于没有高性能计算设备&#xff1f;ColabFold为…...

Longhorn分布式存储实践:构建高可用Kubernetes存储方案

Longhorn分布式存储实践&#xff1a;构建高可用Kubernetes存储方案 一、Longhorn概述 Longhorn是一个开源的分布式块存储系统&#xff0c;专为Kubernetes设计。它提供持久化存储解决方案&#xff0c;支持高可用性、数据冗余和自动故障转移。 Longhorn的核心特性&#xff1a;…...