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

这篇具有很好参考价值的文章主要介绍了WSL2 ubuntu子系统OpenCV调用本机摄像头的RTSP视频流做开发测试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

由于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

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

开始推流

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 地址,将 <路径> 替换为您想要为流指定的路径。
成功推流如下,注意保持控制台的运行
WSL2 ubuntu子系统OpenCV调用本机摄像头的RTSP视频流做开发测试,ubuntu,opencv,linux

三、在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,linux文章来源地址https://www.toymoban.com/news/detail-680184.html

到了这里,关于WSL2 ubuntu子系统OpenCV调用本机摄像头的RTSP视频流做开发测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 手把手教学基于Windows11的wsl2使用ubuntu子系统

    打开“控制面板“-“程序“-“程序和功能“-“启用或关闭windows功能“(侧边栏)-勾选“hyper-v“、“适用于Linux的Windows子系统“、“虚拟机平台“ 控制面板:开始菜单中搜索打开即可 选择“程序”,进入后选择“程序和功能” 选择“启用或关闭windows功能” 勾选“Hyper-V“

    2024年01月20日
    浏览(39)
  • win11 使用 WSL2 安装 linux 子系统 ubuntu 出现错误:无法解析服务器的名称或地址

    解决方法: 记事本打开 C:WindowsSystem32driversetchosts 文件, 添加如下解析地址 #raw.githubusercontent.com 185.199.108.133 raw.githubusercontent.com 185.199.109.133 raw.githubusercontent.com 185.199.110.133 raw.githubusercontent.com 185.199.111.133 raw.githubusercontent.com ifconfig /flushdns 查看可安装的 WSL wsl --list --onlin

    2024年04月27日
    浏览(51)
  • 自己在linux ubuntu子系统安装过程中的各种问题(附加到 WSL2: 系统找不到指定的文件。Wsl/Service/CreateInstance/MountVhd/HCS/ERROR_FIL)

    无法将pDataLocalPackagesCanonicalGroupLimited.Ubuntu_79rhkp1fndgscLocalStateext4.vhdx”附加到 WSL2: 系统找不到指定的文件。 Error code: Wsl/Service/CreateInstance/MountVhd/HCS/ERROR_FILE_NOT_FOUND 解决方法; 1.控制面板下找到程序下的子选项,重新开启关闭 更改设置后重启 失败 2.导入注册列表(慎!!

    2024年04月13日
    浏览(129)
  • Windows中wsl2为虚拟Linux子系统设置固定IP的方法

    ​ 在使用Windows的wsl时,经常需要Linux子系统和Windows宿主机之间通信。但wsl默认情况下,Linux子系统和Windows vEthernet虚拟适配器的IP每次启动后都不一样。给很多应用带来不便。在百度上很多解决方法,经过之次尝试,认为下面的方法简单有效。 我解决此问题时的系统环境:

    2023年04月09日
    浏览(31)
  • Windows下linux 子系统 WSL2怎样使用usb串口(USBIPD-win4.0.0)

    https://github.com/dorssel/usbipd-win 直接下载最新版本的msi文件安装 windows查看usb设备 找到对应设备的编号,共享设备: 如 查看usb设备: 这时候就出现/dev/ttyUSB0啦

    2024年02月03日
    浏览(33)
  • WSL2通过OpenCV调用并展示本机摄像头的RTSP视频流

    本篇博客的由来如上图哈哈,WSL2 相关安装教程可以参考我之前的博客:Win11安装WSL2和Nvidia驱动 更多文章欢迎来我的博客小站看呀,会有更多的技术细节~ ubuntu上请执行 或者编译安装 如果报错 Could NOT find OpenSSL ,安装如下依赖即可解决 下载解压 EasyDarwin Easydarwin是国内团队开

    2024年02月09日
    浏览(52)
  • [ubuntu]给WSL子系统ubuntu安一个桌面环境

    sudo apt install xorg xfce4 xrdp -y sudo sed -i \\\'s/port=3389/port=3390/g\\\' /etc/xrdp/xrdp.ini sudo echo xfce4-session ~/.xsession sudo service xrdp restart 查看自己ip地址: ifconfig 然后在windows上任务栏搜远程桌面 输入ip地址:3390或者localhost:3390,用户名输入你的用户名(比如:我的是u) 下拉,点击Save as,存到桌

    2024年02月09日
    浏览(40)
  • wsl子系统Ubuntu18.04,cuDNN安装

    如果觉得本篇文章对您的学习起到帮助作用,请 点赞 + 关注 + 评论 ,留下您的足迹💪💪💪 本文主要wls子系统Ubuntu18.04安装cuDNN,安装cudnn坑巨多,因此记录以备日后查看,同时,如果能够帮助到更多人,也不胜荣幸。 下载Debian本地存储库安装包。在发出以下命令之前,必须

    2024年02月11日
    浏览(37)
  • Windows WSL子系统Ubuntu22.04安装Nvidia显卡驱动

    最近在研究AI,如果在Linux系统中部署的话需要重装系统,有些麻烦,又不想折腾。所以闲置很久没研究的WSL又拿起来研究了,当然部署ai还需要显卡驱动的支持,就必须先安装显卡驱动。 还没有安装过WSL的童鞋可以看我之前发布的这篇文章 windows11 安装 Linux子系统 WSL及ubunt

    2024年02月09日
    浏览(47)
  • Win10安装Linux子系统WSL(ubuntu2204)及图形桌面xfce4

    什么是 WSL ? 在计算机上使用 Linux 系统通常有两种方式:使用虚拟机或安装 Linux 系统。使用虚拟机时开销较大,直接使用 Linux 系统虽然可以带来流畅体验,但与 Windows 之间来回切换比较麻烦。为此,微软开发了适用于 Linux 的 Windows 子系统,简称 WSL。 WSL 可以让开发人员可以

    2024年02月13日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包