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

OPENCV攝像頭讀取視頻的實(shí)現(xiàn)示例

 更新時(shí)間:2025年09月28日 08:33:26   作者:月瘋  
本文主要介紹了OPENCV攝像頭讀取視頻,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

OpenCV 讀取攝像頭的代碼示例

以下是幾種使用 OpenCV 讀取攝像頭的常見方法:

1. 基礎(chǔ)攝像頭讀取

import cv2

# 打開默認(rèn)攝像頭(通常是0)
cap = cv2.VideoCapture(0)

# 檢查攝像頭是否成功打開
if not cap.isOpened():
    print("無(wú)法打開攝像頭")
    exit()

print("攝像頭已打開,按 'q' 鍵退出")

while True:
    # 讀取一幀
    ret, frame = cap.read()
    
    # 檢查幀是否讀取成功
    if not ret:
        print("無(wú)法讀取幀")
        break
    
    # 顯示幀
    cv2.imshow('攝像頭', frame)
    
    # 按'q'鍵退出
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 釋放資源
cap.release()
cv2.destroyAllWindows()

2. 設(shè)置攝像頭參數(shù)

import cv2

cap = cv2.VideoCapture(0)

# 設(shè)置攝像頭參數(shù)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)   # 寬度
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)  # 高度
cap.set(cv2.CAP_PROP_FPS, 30)            # 幀率

# 獲取實(shí)際參數(shù)值
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
fps = cap.get(cv2.CAP_PROP_FPS)

print(f"攝像頭分辨率: {width}x{height}, 幀率: {fps}")

while True:
    ret, frame = cap.read()
    if not ret:
        break
    
    # 在畫面上顯示信息
    cv2.putText(frame, f"分辨率: {int(width)}x{int(height)}", (10, 30), 
                cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2)
    cv2.putText(frame, f"幀率: {fps}", (10, 60), 
                cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2)
    
    cv2.imshow('攝像頭', frame)
    
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

3. 多攝像頭讀取

import cv2

# 嘗試打開多個(gè)攝像頭
caps = []
for i in range(3):  # 嘗試打開0,1,2號(hào)攝像頭
    cap = cv2.VideoCapture(i)
    if cap.isOpened():
        caps.append(cap)
        print(f"攝像頭 {i} 已連接")
    else:
        print(f"攝像頭 {i} 未連接")

if not caps:
    print("沒有可用的攝像頭")
    exit()

print(f"共找到 {len(caps)} 個(gè)攝像頭")

while True:
    frames = []
    for i, cap in enumerate(caps):
        ret, frame = cap.read()
        if ret:
            # 在每幀上標(biāo)記攝像頭編號(hào)
            cv2.putText(frame, f"Camera {i}", (10, 30), 
                        cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
            frames.append(frame)
    
    if not frames:
        break
    
    # 合并顯示多個(gè)攝像頭畫面
    if len(frames) == 1:
        combined = frames[0]
    elif len(frames) == 2:
        combined = cv2.hconcat(frames)
    else:
        # 對(duì)于3個(gè)或更多攝像頭,可以調(diào)整布局
        top = cv2.hconcat(frames[:2])
        bottom = cv2.hconcat(frames[2:]) if len(frames) > 2 else frames[2]
        combined = cv2.vconcat([top, bottom]) if len(frames) > 2 else top
    
    cv2.imshow('多攝像頭', combined)
    
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 釋放所有攝像頭
for cap in caps:
    cap.release()
cv2.destroyAllWindows()

4. 保存視頻流

import cv2

cap = cv2.VideoCapture(0)

# 設(shè)置視頻編碼器和輸出文件
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi', fourcc, 20.0, (640, 480))

recording = False
print("按 'r' 開始/停止錄制,按 'q' 退出")

while True:
    ret, frame = cap.read()
    if not ret:
        break
    
    # 如果正在錄制,保存幀
    if recording:
        out.write(frame)
        cv2.putText(frame, "錄制中...", (10, 30), 
                    cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)
    
    cv2.imshow('攝像頭', frame)
    
    key = cv2.waitKey(1) & 0xFF
    if key == ord('q'):
        break
    elif key == ord('r'):
        recording = not recording
        print("錄制" if recording else "停止錄制")

cap.release()
out.release()  # 釋放視頻寫入器
cv2.destroyAllWindows()

5. 帶簡(jiǎn)單圖像處理的攝像頭讀取

import cv2
import numpy as np

cap = cv2.VideoCapture(0)

mode = 0  # 0: 原圖, 1: 灰度, 2: 邊緣檢測(cè), 3: 模糊
modes = ['原圖', '灰度', '邊緣檢測(cè)', '模糊']

print("按 'm' 切換模式,按 'q' 退出")

while True:
    ret, frame = cap.read()
    if not ret:
        break
    
    # 根據(jù)模式處理圖像
    if mode == 1:
        processed = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        processed = cv2.cvtColor(processed, cv2.COLOR_GRAY2BGR)  # 轉(zhuǎn)回BGR用于顯示
    elif mode == 2:
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        processed = cv2.Canny(gray, 100, 200)
        processed = cv2.cvtColor(processed, cv2.COLOR_GRAY2BGR)
    elif mode == 3:
        processed = cv2.GaussianBlur(frame, (15, 15), 0)
    else:
        processed = frame.copy()
    
    # 顯示當(dāng)前模式
    cv2.putText(processed, f"模式: {modes[mode]}", (10, 30), 
                cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2)
    
    cv2.imshow('攝像頭', processed)
    
    key = cv2.waitKey(1) & 0xFF
    if key == ord('q'):
        break
    elif key == ord('m'):
        mode = (mode + 1) % len(modes)
        print(f"切換到模式: {modes[mode]}")

cap.release()
cv2.destroyAllWindows()

部分api解釋:

ret, frame = cap.read()

  • 第一個(gè)返回值 (ret):布爾值(True/False),表示幀是否成功讀取
  • 第二個(gè)返回值 (frame):如果讀取成功,這是一個(gè)包含圖像數(shù)據(jù)的 NumPy 數(shù)組
# 顯示一幀圖像
    cv2.imshow('frame', frame)

    # 如果按下'q'鍵,退出循環(huán)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

到此這篇關(guān)于OPENCV攝像頭讀取視頻的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)OPENCV攝像頭讀取視頻內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • django框架模型層功能、組成與用法分析

    django框架模型層功能、組成與用法分析

    這篇文章主要介紹了django框架模型層功能、組成與用法,結(jié)合實(shí)例形式簡(jiǎn)單分析了Django框架中模型層的基本概念、原理、常用組件構(gòu)成與相關(guān)操作技巧,需要的朋友可以參考下
    2019-07-07
  • numpy基礎(chǔ)教程之np.linalg

    numpy基礎(chǔ)教程之np.linalg

    這篇文章主要給大家介紹了關(guān)于numpy基礎(chǔ)教程之np.linalg的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • Python的Django框架使用入門指引

    Python的Django框架使用入門指引

    這篇文章主要介紹了Python的Django框架使用入門指引,本文來(lái)自于IBM官方網(wǎng)站技術(shù)文檔,需要的朋友可以參考下
    2015-04-04
  • python標(biāo)準(zhǔn)庫(kù)學(xué)習(xí)之sys模塊詳解

    python標(biāo)準(zhǔn)庫(kù)學(xué)習(xí)之sys模塊詳解

    sys模塊是最常用的和python解釋器交互的模塊,sys模塊可供訪問(wèn)由解釋器(interpreter)使用或維護(hù)的變量和與解釋器進(jìn)行交互的函數(shù),下面這篇文章主要給大家介紹了關(guān)于python標(biāo)準(zhǔn)庫(kù)學(xué)習(xí)之sys模塊的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • 如何使用Python中paramiko工具批量的查詢、管理、配置路由器交換機(jī)

    如何使用Python中paramiko工具批量的查詢、管理、配置路由器交換機(jī)

    本篇文章主要記錄在學(xué)習(xí)過(guò)程中,使用paramiko小批量管理路由器交換機(jī)的練習(xí),循序漸近的理解paramiko這個(gè)工具和代碼運(yùn)用,感興趣的朋友跟隨小編一起看看吧
    2026-02-02
  • Python 降級(jí)的兩種實(shí)現(xiàn)方法

    Python 降級(jí)的兩種實(shí)現(xiàn)方法

    本文主要介紹了Python 降級(jí)的兩種實(shí)現(xiàn)方法,幫助用戶在降級(jí)Python時(shí)不完全卸載,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • python實(shí)現(xiàn)驗(yàn)證碼識(shí)別功能

    python實(shí)現(xiàn)驗(yàn)證碼識(shí)別功能

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)驗(yàn)證碼識(shí)別功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Python寫的一個(gè)定時(shí)重跑獲取數(shù)據(jù)庫(kù)數(shù)據(jù)

    Python寫的一個(gè)定時(shí)重跑獲取數(shù)據(jù)庫(kù)數(shù)據(jù)

    本文給大家分享基于python寫的一個(gè)定時(shí)重跑獲取數(shù)據(jù)庫(kù)數(shù)據(jù)的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下
    2016-12-12
  • python爬取豆瓣電影排行榜(requests)的示例代碼

    python爬取豆瓣電影排行榜(requests)的示例代碼

    這篇文章主要介紹了python爬取豆瓣電影排行榜(requests),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • python實(shí)現(xiàn)感知器算法詳解

    python實(shí)現(xiàn)感知器算法詳解

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)感知器算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12

最新評(píng)論

湄潭县| 疏勒县| 遵义市| 兰溪市| 扎鲁特旗| 大悟县| 垦利县| 晋中市| 波密县| 丹凤县| 徐水县| 绥化市| 久治县| 阜平县| 定兴县| 福海县| 剑阁县| 石柱| 毕节市| 扎囊县| 黑龙江省| 新津县| 平湖市| 石林| 会昌县| 油尖旺区| 子洲县| 东乌珠穆沁旗| 准格尔旗| 安达市| 成武县| 江川县| 寻甸| 英德市| 沙坪坝区| 抚远县| 邯郸县| 宽城| 桐梓县| 建平县| 英超|