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

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/43163.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/43163.shtml
英文地址,請注明出處:http://en.pswp.cn/news/43163.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux系統服務學習(二)linux下yum源配置實戰

文章目錄 Linux下yum源配置實戰一、Linux下軟件包的管理1、軟件安裝方式2、源碼安裝的配置過程3、詳解源碼安裝的配置過程&#xff08;定制&#xff09;4、詳解編譯過程5、安裝過程6、axel多線程下載軟件源碼安裝7、使用軟鏈接解決command not found8、使用環境變量解決command…

軟考A計劃-系統集成項目管理工程師-收尾管理

點擊跳轉專欄>Unity3D特效百例點擊跳轉專欄>案例項目實戰源碼點擊跳轉專欄>游戲腳本-輔助自動化點擊跳轉專欄>Android控件全解手冊點擊跳轉專欄>Scratch編程案例點擊跳轉>軟考全系列點擊跳轉>藍橋系列 &#x1f449;關于作者 專注于Android/Unity和各種游…

字符串的無重復排列組合

題目描述&#xff1a; 無重復字符串的排列組合。編寫一種方法&#xff0c;計算某字符串的所有排列組合&#xff0c;字符串每個字符均不相同。 示例1: 輸入&#xff1a;S "qwe" 輸出&#xff1a;["qwe", "qew", "wqe", "weq&q…

中間件(二)dubbo負載均衡介紹

一、負載均衡概述 支持輪詢、隨機、一致性hash和最小活躍數等。 1、輪詢 ① sequences&#xff1a;內部的序列計數器 ② 服務器接口方法權重一樣&#xff1a;&#xff08;sequences1&#xff09;%服務器的數量&#xff08;決定調用&#xff09;哪個服務器的服務。 ③ 服務器…

opencv直方圖與模板匹配

import cv2 #opencv讀取的格式是BGR import numpy as np import matplotlib.pyplot as plt#Matplotlib是RGB %matplotlib inline def cv_show(img,name):cv2.imshow(name,img)cv2.waitKey()cv2.destroyAllWindows() 直方圖 cv2.calcHist(images,channels,mask,histSize,ran…

Spring中Bean的生命周期以及Bean的單例與多例模式

一. Bean的生命周期 bean的生命周期可以表達為&#xff1a;bean的定義?bean的初始化?bean的使用?bean的銷毀 Bean的初始化過程 1&#xff09;通過XML、Java annotation&#xff08;注解&#xff09;以及Java Configuration&#xff08;配置類&#xff09; 等方式加載Bea…

2023+HuggingGPT: Solving AI Tasks with ChatGPT and itsFriends in Hugging Face

摘要&#xff1a; 語言是llm(例如ChatGPT)連接眾多AI模型(例如hugs Face)的接口&#xff0c;用于解決復雜的AI任務。在這個概念中&#xff0c;llms作為一個控制器&#xff0c;管理和組織專家模型的合作。LLM首先根據用戶請求規劃任務列表&#xff0c;然后為每個任務分配專家模…

Unity 鼠標實現對物體的移動、縮放、旋轉

文章目錄 1. 代碼2. 測試場景 1. 代碼 using UnityEngine;public class ObjectManipulation : MonoBehaviour {// 縮放比例限制public float MinScale 0.2f;public float MaxScale 3.0f;// 縮放速率private float scaleRate 1f;// 新尺寸private float newScale;// 射線pri…

【Windows系統編程】03.遠線程注入ShellCode

shellcode&#xff1a;本質上也是一段普通的代碼&#xff0c;只不過特殊的編程手法&#xff0c;可以在任意環境下&#xff0c;不依賴于原有的依賴庫執行。 遠程線程 #include <iostream> #include <windows.h> #include <TlHelp32.h>int main(){HANDLE hPr…

Educational Codeforces Round 153 (Rated for Div. 2)ABC

Educational Codeforces Round 153 (Rated for Div. 2) 目錄 A. Not a Substring題目大意思路核心代碼 B. Fancy Coins題目大意思想核心代碼 C. Game on Permutation題目大意思想核心代碼 A. Not a Substring 題目大意 給定一個只包含“&#xff08;”和“&#xff09;”這兩…

react-native-webview RN和html雙向通信

rn登錄后得到的token需要傳遞給網頁&#xff0c;js獲取到的瀏覽器信息需要傳遞給rn RN Index.js: import React from react import { WebView } from react-native-webview import useList from ./useListexport default function Index(props) {const { uri, jsCode, webVie…

iPhone刪除的照片能恢復嗎?不小心誤刪了照片怎么找回?

iPhone最近刪除清空了照片還能恢復嗎&#xff1f;大家都知道&#xff0c;照片對于我們來說是承載著美好回憶的一種形式。它記錄著我們的平淡生活&#xff0c;也留住了我們的美好瞬間&#xff0c;具有極其重要的紀念價值。 照片不小心誤刪是一件非常難受的事&#xff0c;那么iP…

android TextView 超出長度使用省略號

在Android中最常見的需求&#xff0c;就是在在外部展示信息時&#xff0c;需要簡要展示內容。TextView僅需在靜態布局文件中設置以下幾個屬性&#xff1a; android:maxWidth“100dp” // 寬度是多少才算超出 android:maxLines"2" // 高度多少才算超出 android:elli…

React下載文件的兩種方式

React下載文件的兩種方式 - 代碼先鋒網 不知道有用沒用看著挺整齊 沒試過 1、GET類型下載 download url > {const eleLink document.createElement(a);eleLink.style.display none;// eleLink.target "_blank"eleLink.href url;// eleLink.href record;d…

Centos7 配置Docker鏡像加速器

docker實戰(一):centos7 yum安裝docker docker實戰(二):基礎命令篇 docker實戰(三):docker網絡模式(超詳細) docker實戰(四):docker架構原理 docker實戰(五):docker鏡像及倉庫配置 docker實戰(六):docker 網絡及數據卷設置 docker實戰(七):docker 性質及版本選擇 認知升…

CentOS系統環境搭建(五)——Centos7安裝maven

centos系統環境搭建專欄&#x1f517;點擊跳轉 Centos7安裝maven 下載壓縮包 maven下載官網 解壓 壓縮包放置到/usr/local tar -xvf apache-maven-3.9.2-bin.tar.gz配置環境變量 vim /etc/profile在最下面追加 MAVEN_HOME/usr/local/apache-maven-3.9.2 export PATH${MAV…

Jenkins 監控dist.zip文件內容發生變化 觸發自動部署

為Jenkins添加plugin http://xx:xx/manage 創建一個任務 構建觸發器 每3分鐘掃描一次&#xff0c;發現指定文件build.zip文件的MD5發生變化后 觸發任務

【C++學習手札】一文帶你認識C++虛繼承??

食用指南&#xff1a;本文在有C基礎的情況下食用更佳 &#x1f340;本文前置知識&#xff1a;C虛函數&#xff08;很重要&#xff0c;內部剖析&#xff09; ??今日夜電波&#xff1a;僕らのつづき—柊優花 1:06 ━━━━━━?&#x1f49f;──────── 3:51 …

創建密碼庫/創建用戶帳戶/更新 Ansible 庫的密鑰/ 配置cron作業

目錄 創建密碼庫 創建用戶帳戶 更新 Ansible 庫的密鑰 配置cron作業 創建密碼庫 按照下方所述&#xff0c;創建一個 Ansible 庫來存儲用戶密碼&#xff1a; 庫名稱為 /home/curtis/ansible/locker.yml 庫中含有兩個變量&#xff0c;名稱如下&#xff1a; pw_developer&#…

神經網絡基礎-神經網絡補充概念-39-梯度消失與梯度爆炸

簡介 梯度消失和梯度爆炸是在深度神經網絡中訓練過程中可能出現的問題&#xff0c;導致模型難以訓練或無法收斂。這些問題與反向傳播算法中的梯度計算有關。 概念 梯度消失&#xff08;Gradient Vanishing&#xff09;&#xff1a;在深層神經網絡中&#xff0c;特別是具有很…