亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

OpenCV 讀取攝像頭的代碼示例

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

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

import cv2

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

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

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

while True:
    # 讀取一幀
    ret, frame = cap.read()
    
    # 檢查幀是否讀取成功
    if not ret:
        print("無法讀取幀")
        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ù)值
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

# 嘗試打開多個攝像頭
caps = []
for i in range(3):  # 嘗試打開0,1,2號攝像頭
    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)} 個攝像頭")

while True:
    frames = []
    for i, cap in enumerate(caps):
        ret, frame = cap.read()
        if ret:
            # 在每幀上標(biā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
    
    # 合并顯示多個攝像頭畫面
    if len(frames) == 1:
        combined = frames[0]
    elif len(frames) == 2:
        combined = cv2.hconcat(frames)
    else:
        # 對于3個或更多攝像頭,可以調(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. 帶簡單圖像處理的攝像頭讀取

import cv2
import numpy as np

cap = cv2.VideoCapture(0)

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

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()

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

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

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

相關(guān)文章

最新評論