成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

傳統視覺項目 | ?使用 OpenCV 進行運動檢測

開發 機器視覺
在本文中,我們將引導你了解檢測視頻流或實時畫面中運動的基本概念、工具和技術。

在技術不斷重塑我們與世界互動方式的時代,計算機視覺已成為最令人興奮的創新領域之一。從自動駕駛汽車到家庭安防系統,檢測和解釋運動的能力已成為現代應用的重要組成部分。在這些進步的背后,OpenCV(開源計算機視覺庫)扮演了核心角色,它使開發者能夠構建強大而高效的圖像和視頻處理系統。

在本文中,我們將引導你了解檢測視頻流或實時畫面中運動的基本概念、工具和技術。通過本文的學習,你不僅將擁有一個可運行的原型,還會對運動檢測背后的原理有更深入的理解。

運動檢測的工作原理是什么?

運動檢測,也稱為動作檢測,涉及識別視頻流中連續幀之間的變化。其基本思想很簡單:如果幀的某一部分隨時間發生顯著變化,我們假設該區域發生了運動。以下是運動檢測的基本流程:

  • 幀差分:通過比較視頻的連續幀,我們可以識別像素值發生變化的區域。這些差異通常表示運動。
  • 閾值處理:在識別出差異后,應用閾值以將顯著變化與噪聲分離。這確保忽略微小變化(如光照變化)。
  • 輪廓檢測:為了定位和勾勒移動物體,分析處理后的圖像以檢測輪廓。這些輪廓代表移動物體的形狀。
  • 背景減除(可選):在更高級的情況下,維護一個背景模型,任何與背景的偏差都被視為運動。這種方法在固定攝像頭的場景中特別有效。
  • 后處理:可以使用其他技術(如過濾小范圍運動或穩定檢測)來優化結果,提高準確性。

為什么選擇OpenCV?

OpenCV(開源計算機視覺)是一個強大的開源庫,專為實時計算機視覺和圖像處理而設計。它提供了廣泛的工具和功能,使運動檢測、人臉識別、目標跟蹤等任務變得簡單高效。OpenCV的主要特點包括:

  • 廣泛的算法:預建的圖像處理、特征提取和目標檢測算法。
  • 多語言支持:與Python、C++、Java等語言無縫協作。
  • 實時性能:針對速度進行了優化,非常適合實時應用。
  • 豐富的文檔:龐大的社區和優秀的文檔使OpenCV對初學者友好且高度可定制。

在本文中,我們將使用OpenCV的視頻處理功能構建一個運動檢測系統。通過將OpenCV的工具與Python的簡潔性結合,你會發現實現一個能夠有效檢測和突出運動的解決方案非常容易。

開始使用

步驟1:安裝必要的庫

pip install opencv-python numpy

步驟2:導入庫

import cv2
import numpy as np

步驟3:定義運動檢測邏輯

  • 使用函數calculate_motion_regions檢測運動。
  • 比較連續幀以發現差異。
  • 使用輪廓突出顯示運動區域。
  • 通過閾值過濾小范圍運動。
def calculate_motion_regions(prev_frame, curr_frame, mask, threshold=900):
    # Apply the mask to both frames
    prev_roi = cv2.bitwise_and(prev_frame, prev_frame, mask=mask)
    curr_roi = cv2.bitwise_and(curr_frame, curr_frame, mask=mask)

    # Convert to grayscale for simplicity
    prev_gray = cv2.cvtColor(prev_roi, cv2.COLOR_BGR2GRAY)
    curr_gray = cv2.cvtColor(curr_roi, cv2.COLOR_BGR2GRAY)

    # Calculate absolute difference
    diff = cv2.absdiff(prev_gray, curr_gray)

    # Threshold the difference to binarize
    _, diff_thresh = cv2.threshold(diff, 30, 255, cv2.THRESH_BINARY)

    # Find contours of the motion regions
    contours, _ = cv2.findContours(diff_thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

    motion_regions = []
    for contour in contours:
        if cv2.contourArea(contour) > threshold:  # Filter small motion areas
            motion_regions.append([contour])

    return motion_regions, diff_thresh

步驟4:初始化視頻捕獲和掩碼

打開視頻文件。

cap = cv2.VideoCapture(r"YourVideoPath") # or use 0 for webcam
if not cap.isOpened():
    print("Error: Cannot open video file.")
    exit()

讀取第一幀并創建覆蓋整個幀的掩碼。

ret, prev_frame = cap.read()
if not ret:
    print("Error: Cannot read the first frame.")
    cap.release()
    exit()

mask = np.ones(prev_frame.shape[:2], dtype=np.uint8) * 255

步驟5:逐幀處理視頻

循環遍歷視頻幀,計算運動區域并顯示結果。

while cap.isOpened():
    ret, curr_frame = cap.read()
    if not ret:
        break

    motion_regions, motion_mask = calculate_motion_regions(prev_frame, curr_frame, mask)

    # Draw bounding boxes around motion regions

    for motion_region in motion_regions:
        cv2.polylines(curr_frame, motion_region, isClosed=True, color=(0, 255, 0), thickness=1)

    # Update the previous frame
    prev_frame = curr_frame.copy()

    # Convert motion mask to 3 channels for concatenation
    motion_mask_colored = cv2.cvtColor(motion_mask, cv2.COLOR_GRAY2BGR)

    curr_frame = cv2.resize(curr_frame, (490, 640))
    motion_mask_colored = cv2.resize(motion_mask_colored, (490, 640))

    # Concatenate the current frame and the motion mask side-by-side
    combined_frame = cv2.hconcat([curr_frame, motion_mask_colored])

    # Show the combined frame
    cv2.imshow('Motion Detection', combined_frame)

    # Break the loop with 'q'
    if cv2.waitKey(30) & 0xFF == ord('q'):
        break

步驟6:回收

cap.release()
cv2.destroyAllWindows()

工作原理

(1) 幀比較:

  • 每一幀都與前一幀進行比較,以識別差異(運動)。
  • 使用每幀的灰度版本以簡化處理。

(2) 運動閾值處理:

通過閾值過濾掉微小差異,以分離出顯著的運動區域。

(3) 運動區域邊界:

在檢測到的運動區域周圍繪制輪廓以突出顯示。

(4) 可視化:

將處理后的幀和運動掩碼并排顯示,以便更好地理解。

運行代碼

  • 將完整腳本保存為.py文件。
  • 運行腳本
  • 按q鍵退出視頻顯示。
責任編輯:趙寧寧 來源: 小白玩轉Python
相關推薦

2022-08-25 09:00:00

Python編程語言開源庫

2024-11-27 16:06:12

2016-03-25 10:41:40

項目運維管理運維

2023-10-12 09:21:41

Java圖像

2020-10-15 12:00:01

Python 開發編程語言

2023-03-09 07:54:54

2025-02-10 16:00:00

OpenCVYOLOv8計算機視覺

2010-06-11 16:04:34

Windows 7驅動

2024-11-06 16:56:51

2024-07-02 10:28:59

2023-06-26 10:44:42

2010-04-02 08:56:00

HTML 5

2024-09-12 17:19:43

YOLO目標檢測深度學習

2025-02-11 08:30:00

2021-07-15 08:00:00

人工智能深度學習技術

2018-05-08 14:25:22

Pythondlib人臉檢測

2024-11-29 16:10:31

2018-06-19 11:00:33

OpenCVPythonC++

2024-12-13 15:53:58

VLM小型視覺語言模型LLM

2010-05-13 17:52:41

MySQL語句
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一区 | 国产一二三区电影 | 黄色一级大片在线免费看产 | 特级a欧美做爰片毛片 | 欧美成人精品一区二区三区 | 久久久久久成人 | 夜夜精品浪潮av一区二区三区 | 天天射夜夜操 | 精品日韩欧美一区二区 | 久久福利电影 | 欧美亚洲视频在线观看 | 夜夜久久 | 亚洲va国产日韩欧美精品色婷婷 | 91视视频在线观看入口直接观看 | 91综合网| 国产精品日韩欧美一区二区三区 | 亚洲va欧美va天堂v国产综合 | 久久99久久98精品免观看软件 | 久久精品天堂 | 视频一区在线观看 | 国产黑丝av | av网站免费观看 | 黄色欧美大片 | 女生羞羞网站 | 在线成人免费视频 | 国产综合精品 | 日韩视频一区在线观看 | 国产一区二区激情视频 | 日韩在线不卡 | 91精品久久久久久久久中文字幕 | 日韩欧美一级精品久久 | 成人av激情 | 欧美成人免费在线 | 野狼在线社区2017入口 | 国产在线中文字幕 | 日韩精品一区二区三区免费视频 | 久久精品网 | 我要看黄色录像一级片 | 99成人免费视频 | 福利av在线 | 日韩视频一区在线观看 |