最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python使用OpenCV捕獲攝像頭視頻流并在窗口中顯示

 更新時間:2025年08月01日 09:59:15   作者:飯來_  
這篇文章主要為大家詳細(xì)介紹了Python如何使用OpenCV捕獲攝像頭視頻流并在窗口中顯示,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下

一、實例代碼

連接 USB 相機(jī)之后,通過指令ls /dev/video*查看設(shè)備號,通過一個簡單的腳本使用 OpenCV 庫來捕獲攝像頭視頻流并在窗口中顯示,ESC鍵退出。

import cv2

# 攝像頭設(shè)備號
cap = cv2.VideoCapture(0)
window_name = "usb camera"

# 啟用 MJPEG 壓縮
cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'))

# 嘗試設(shè)置為 60 FPS(是否成功取決于攝像頭)
cap.set(cv2.CAP_PROP_FPS, 60)

# 嘗試設(shè)置攝像頭分辨率
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1920)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)

# 獲取實際設(shè)置的分辨率
actual_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
actual_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
print(f"實際分辨率: {actual_width}x{actual_height}")

# 打印實際幀率(FPS)
fps = cap.get(cv2.CAP_PROP_FPS)
print(f"攝像頭幀率: {fps} FPS")

cv2.namedWindow(window_name, cv2.WINDOW_NORMAL)
cv2.resizeWindow(window_name, actual_width, actual_height)  # 窗口匹配分辨率

while True:
    ret, frame = cap.read()
    if not ret:
        print("讀取失敗")
        break
    
    cv2.imshow(window_name, frame)
    
    if cv2.waitKey(1) == 27:  # ESC鍵退出
        break

cap.release()
cv2.destroyAllWindows()

二、相關(guān)設(shè)置

cap.set(參數(shù)屬性, 期望值),用于向攝像頭硬件發(fā)送配置請求,嘗試將某個參數(shù)(如編碼格式、幀率、分辨率)設(shè)置為指定值。

編碼格式cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('M','J','P','G')) 是一個 常見且推薦的操作,尤其在需要高分辨率、高幀率USB帶寬受限的場景。MJPEG(Motion-JPEG)壓縮能顯著減少數(shù)據(jù)量,使攝像頭在有限帶寬下支持更高的分辨率(如1080p/4K)和幀率(如60FPS/120FPS),同時降低CPU解碼負(fù)擔(dān)。相比原始格式(如YUYV),MJPEG 在實時視頻捕獲中更高效,兼容性廣,是OpenCV、工業(yè)相機(jī)及嵌入式設(shè)備的常用選擇。若攝像頭支持,建議優(yōu)先啟用 MJPEG 以優(yōu)化性能,若不支持,可回退到默認(rèn)格式。

幀率cap.set(cv2.CAP_PROP_FPS, 60)OpenCV 中控制幀率的屬性參數(shù),用于設(shè)置攝像頭的目標(biāo)采集幀率(如60FPS),60是一個請求值,實際幀率取決于攝像頭的硬件能力和當(dāng)前配置的分辨率/編碼格式等,可能最高僅支持30FPS,即使設(shè)置為60FPS也會自動降級。

分辨率cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1920) 用于設(shè)置攝像頭采集畫面的目標(biāo)寬度(水平分辨率),1920同樣是一個請求值,實際分辨率可能被攝像頭自動調(diào)整為最接近的支持值。

其他參數(shù)設(shè)置可供參考并以設(shè)備實際響應(yīng)為準(zhǔn)。

參數(shù)類別OpenCV 屬性名典型值/選項作用說明適用場景
自動曝光CAP_PROP_AUTO_EXPOSURE1(自動), 0(手動)控制攝像頭是否自動調(diào)整曝光量光照變化頻繁的環(huán)境(如戶外)
手動曝光CAP_PROP_EXPOSURE范圍依賴硬件,典型范圍為 -13 到 0手動設(shè)置曝光值(正值增亮,負(fù)值減暗)需要固定曝光(如工業(yè)檢測)
自動白平衡CAP_PROP_AUTO_WB1(自動), 0(手動)啟用/禁用自動白平衡色彩準(zhǔn)確性要求高的場景
手動白平衡CAP_PROP_WB_TEMPERATURE色溫值(如 5000K)手動設(shè)置白平衡色溫特殊光照條件(如霓虹燈環(huán)境)
緩沖區(qū)大小CAP_PROP_BUFFERSIZE1(最小延遲)減少攝像頭內(nèi)部緩沖幀數(shù),降低延遲實時控制(如無人機(jī)、機(jī)器人視覺)
自動對焦CAP_PROP_AUTOFOCUS1(啟用), 0(禁用)控制攝像頭是否自動對焦動態(tài)距離變化的場景(如人臉跟蹤)
手動對焦CAP_PROP_FOCUS0(最近)-100(最遠(yuǎn))手動調(diào)整對焦距離固定焦距需求(如顯微鏡拍攝)
API后端選擇cv2.VideoCapture() 的第二個參數(shù)cv2.CAP_V4L2(Linux常用)指定視頻采集后端,解決兼容性問題跨平臺或特定系統(tǒng)(如Linux用V4L2)
亮度調(diào)整CAP_PROP_BRIGHTNESS0-100調(diào)整畫面整體亮度低光環(huán)境補(bǔ)償
對比度調(diào)整CAP_PROP_CONTRAST0-100調(diào)整畫面對比度增強(qiáng)細(xì)節(jié)可見性
飽和度調(diào)整CAP_PROP_SATURATION0-100調(diào)整色彩飽和度色彩增強(qiáng)或黑白模式
增益控制CAP_PROP_GAIN0-100調(diào)整信號放大倍數(shù)(可能增加噪點)極低光照環(huán)境

三、知識延展

使用Python和OpenCV連接并處理IP攝像頭視頻流

安裝必要的庫

要完成本教程,您需要確保已安裝了Python環(huán)境以及OpenCV庫。如果您還沒有安裝OpenCV,可以通過pip工具輕松安裝:

pip install opencv-python

獲取IP攝像頭的URL

每個IP攝像頭都有一個特定的URL用來訪問其視頻流。這個URL通常遵循以下格式:

  • RTSP (Real Time Streaming Protocol): rtsp://<ip_address>/path
  • HTTP: http://<ip_address>/path

其中 <ip_address> 是您的IP攝像頭的IP地址,而 /path 則是訪問視頻流的具體路徑。對于一些攝像頭來說,這個路徑可能是固定的,如 /video.mjpg 或 /live.sdp。對于其他攝像頭,您可能需要查閱產(chǎn)品手冊來找到正確的路徑。

如果您的攝像頭需要身份驗證,那么URL格式可能會有所不同,例如:

  • 帶認(rèn)證的RTSP: rtsp://username:password@ip_address/path
  • 帶認(rèn)證的HTTP: http://username:password@ip_address/path

請?zhí)鎿Q上述模板中的 username, password, ip_address, 和 path 為實際值。

編寫代碼

接下來,我們將編寫一個簡單的Python腳本來捕獲并顯示來自IP攝像頭的視頻流。

import cv2

# 指定IP攝像頭的URL
url = 'rtsp://admin:123456@192.168.1.216/H264?ch=1&subtype=0'

# 創(chuàng)建一個VideoCapture對象,參數(shù)是視頻源,這里是我們指定的IP攝像頭URL
cap = cv2.VideoCapture(url)

# 檢查是否成功打開視頻流
if not cap.isOpened():
    print("Error: Could not open video stream.")
else:
    print("Video stream opened successfully.")

# 開始循環(huán)讀取視頻幀
while True:
    # 讀取一幀視頻
    ret, frame = cap.read()

    # 如果讀取成功(ret為True),則顯示這一幀
    if ret:
        # 顯示視頻幀
        cv2.imshow('Capturing', frame)
        
        # 檢測按鍵,如果按下'q'鍵則退出循環(huán)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        # 如果讀取失敗,打印錯誤信息并嘗試重新連接
        print("Error: Failed to read frame from video stream.")
        # 可選:嘗試重新連接
        cap.release()
        cap = cv2.VideoCapture(url)

# 清理資源
cap.release()
cv2.destroyAllWindows()

代碼解析

導(dǎo)入OpenCV庫:我們首先導(dǎo)入了OpenCV庫,這是一個強(qiáng)大的計算機(jī)視覺庫,支持多種編程語言,包括Python。

指定IP攝像頭的URL:這里指定了一個包含用戶名和密碼的RTSP協(xié)議URL,用于訪問IP攝像頭。

創(chuàng)建VideoCapture對象:通過傳遞URL給cv2.VideoCapture()函數(shù)來創(chuàng)建一個視頻捕獲對象。

檢查視頻流是否打開:使用isOpened()方法檢查視頻流是否成功打開。如果沒有成功,打印錯誤信息。

讀取視頻幀:在一個無限循環(huán)中,調(diào)用read()方法從視頻流中讀取下一幀。如果讀取成功,ret變量將為True,并且frame變量將包含當(dāng)前幀的數(shù)據(jù)。

顯示視頻幀:使用imshow()函數(shù)顯示當(dāng)前讀取到的視頻幀。

檢測按鍵:使用waitKey(1)等待1毫秒,如果在這期間用戶按下’q’鍵,則跳出循環(huán)。

清理資源:在結(jié)束程序之前,釋放視頻捕獲對象并關(guān)閉所有OpenCV創(chuàng)建的窗口。

到此這篇關(guān)于Python使用OpenCV捕獲攝像頭視頻流并在窗口中顯示的文章就介紹到這了,更多相關(guān)Python OpenCV捕獲攝像頭視頻流內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Python中enumerate函數(shù)的使用

    詳解Python中enumerate函數(shù)的使用

    Python?的?enumerate()?函數(shù)就像是一個神秘的黑箱,它具有非常有用的高級用法。本文就來為大家詳細(xì)講一下它的使用,需要的可以參考一下
    2022-08-08
  • 詳解Python如何求不同分辨率圖像的峰值信噪比

    詳解Python如何求不同分辨率圖像的峰值信噪比

    這篇文章主要為大家詳細(xì)介紹了如何利用Python中的?NumPy?和?OpenCV?庫實現(xiàn)求不同分辨率圖像的峰值信噪比,感興趣的小伙伴可以跟隨不想一起學(xué)習(xí)一下
    2023-01-01
  • 基于Python實現(xiàn)語音識別功能

    基于Python實現(xiàn)語音識別功能

    這篇文章給大家介紹了如何基于Python實現(xiàn)語音識別功能,文中通過代碼示例給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,具有一定的參考價值,需要的朋友可以參考下
    2023-12-12
  • 用Python編寫一個國際象棋AI程序

    用Python編寫一個國際象棋AI程序

    在這篇文章中我會介紹這個AI如何工作,每一個部分做什么,它為什么能那樣工作起來。你可以直接通讀本文,或者去下載代碼,邊讀邊看代碼。雖然去看看其他文件中有什么AI依賴的類也可能有幫助,但是AI部分全都在AI.py文件中
    2014-11-11
  • TensorFlow自定義模型保存加載和分布式訓(xùn)練

    TensorFlow自定義模型保存加載和分布式訓(xùn)練

    本篇文章將涵蓋 TensorFlow 的高級應(yīng)用,包括如何自定義模型的保存和加載過程,以及如何進(jìn)行分布式訓(xùn)練,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • flask框架實現(xiàn)修改密碼和免密登錄功能

    flask框架實現(xiàn)修改密碼和免密登錄功能

    flask是python web開發(fā)的常用框架之一。本文將講述flask如何實現(xiàn)修改密碼和免密登錄功能
    2021-05-05
  • python使用pipeline批量讀寫redis的方法

    python使用pipeline批量讀寫redis的方法

    今天小編就為大家分享一篇python使用pipeline批量讀寫redis的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • PyQt5+Caffe+Opencv搭建人臉識別登錄界面

    PyQt5+Caffe+Opencv搭建人臉識別登錄界面

    這篇文章主要為大家詳細(xì)介紹了PyQt5+Caffe+Opencv搭建人臉識別登錄界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • 用Python實現(xiàn)爬取百度熱搜信息

    用Python實現(xiàn)爬取百度熱搜信息

    大家好,本篇文章主要講的是用Python實現(xiàn)爬取百度熱搜信息,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • Python合并Excel中sheet表的示例代碼

    Python合并Excel中sheet表的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用Python實現(xiàn)將Excel中的五個表合成一個表,文中的示例代碼簡潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11

最新評論

泸定县| 海晏县| 沂源县| 宁晋县| 阳朔县| 泗洪县| 拉孜县| 博爱县| 古蔺县| 微博| 泾川县| 新泰市| 咸丰县| 阿坝县| 五指山市| 商南县| 桃园市| 宜君县| 乡宁县| 盘山县| 新绛县| 东光县| 龙江县| 阜康市| 越西县| 鹤壁市| 安泽县| 安多县| 阜南县| 西青区| 温宿县| 连平县| 莎车县| 德清县| 当雄县| 鹿泉市| 宝丰县| 杭州市| 咸宁市| 白玉县| 巴青县|