下面是一个使用OpenCV和Python来实现区域入侵检测的示例代码。该代码将检测特定区域是否被侵入,并在区域入侵超过半分钟后显示超时并发出声音报警。

import cv2
import numpy as np
import time
import winsound

# 设置视频文件路径,或使用摄像头输入
video_path = 'path/to/your/video/file.mp4'
# 设置区域的边界框坐标
region_of_interest = [(100, 100), (300, 300)]

# 创建视频捕捉对象
cap = cv2.VideoCapture(video_path)

# 初始化计时器
start_time = time.time()
timeout_duration = 30  # 超时时间(秒)
timeout = False

while True:
    # 读取帧
    ret, frame = cap.read()
    if not ret:
        break

    # 绘制区域边界框
    cv2.rectangle(frame, region_of_interest[0], region_of_interest[1], (0, 255, 0), 2)

    # 提取区域图像
    roi = frame[region_of_interest[0][1]:region_of_interest[1][1], region_of_interest[0][0]:region_of_interest[1][0]]

    # 将区域图像转换为灰度图像
    gray_roi = cv2.cvtColor(roi, cv2.COLOR_BGR2GRAY)

    # 对灰度图像应用高斯模糊以减少噪声
    blurred_roi = cv2.GaussianBlur(gray_roi, (5, 5), 0)

    # 应用Canny边缘检测算法
    edges = cv2.Canny(blurred_roi, 50, 150)

    # 寻找边缘点
    contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

    # 判断是否有边缘点在区域内
    intrusion_detected = False
    for contour in contours:
        area = cv2.contourArea(contour)
        if area > 500:  # 根据需要调整面积阈值
            intrusion_detected = True
            break

    # 如果检测到入侵,计时并检查是否超时
    if intrusion_detected:
        elapsed_time = time.time() - start_time
        if elapsed_time > timeout_duration:
            timeout = True
            print("超时")
            winsound.Beep(1000, 1000)  # 发出声音报警

    # 显示帧
    cv2.imshow("Frame", frame)

    # 按下 'q' 键退出循环
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 释放资源
cap.release()
cv2.destroyAllWindows()

在上述代码中,我们使用了OpenCV的一些核心函数,如读取视频帧、绘制边界框、灰度转换、高斯模糊、Canny边缘检测和轮廓查找等。我们还使用了time库来计时,并使用winsound库来发出声音报警。

你可以根据需要对代码进行调整和优化,例如调整区域边界框的坐标、调整入侵检测的阈值、调整超时时间等

用opencv python 写代码要求如下:检测到区域入侵超过半分钟就显示超时并发出声音报警

原文地址: http://www.cveoy.top/t/topic/h0p5 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录