以下是一个基于Python和OpenCV的排泥检测代码示例:

import cv2
import datetime

def detect_mud():
    cap = cv2.VideoCapture(0)  # 打开摄像头,如果有多个摄像头,可以尝试不同的索引值

    # 获取第一帧图像
    _, frame1 = cap.read()
    gray1 = cv2.cvtColor(frame1, cv2.COLOR_BGR2GRAY)
    gray1 = cv2.GaussianBlur(gray1, (21, 21), 0)

    # 初始化变量
    alarm_triggered = False
    start_time = None

    while True:
        _, frame2 = cap.read()
        gray2 = cv2.cvtColor(frame2, cv2.COLOR_BGR2GRAY)
        gray2 = cv2.GaussianBlur(gray2, (21, 21), 0)

        # 计算当前帧和前一帧的差异
        frame_delta = cv2.absdiff(gray1, gray2)
        thresh = cv2.threshold(frame_delta, 30, 255, cv2.THRESH_BINARY)[1]
        thresh = cv2.dilate(thresh, None, iterations=2)

        # 寻找轮廓
        contours, _ = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

        # 检测变化过大且持续一分钟
        motion_detected = False
        for contour in contours:
            if cv2.contourArea(contour) > 500:
                motion_detected = True
                break

        if motion_detected:
            if not alarm_triggered:
                # 变化开始时间
                start_time = datetime.datetime.now()
                alarm_triggered = True
            else:
                # 检测时间是否超过一分钟
                elapsed_time = datetime.datetime.now() - start_time
                if elapsed_time.total_seconds() >= 60:
                    # 在窗口中显示时间和"alarm"
                    cv2.putText(frame2, "Alarm", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)
                    cv2.putText(frame2, str(datetime.datetime.now()), (10, 60), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)
        else:
            alarm_triggered = False

        cv2.imshow("Mud Detection", frame2)

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

        # 更新前一帧
        gray1 = gray2

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

# 调用排泥检测函数
detect_mud()

这个代码通过打开摄像头,获取前后帧图像,并对其进行差分处理,然后通过阈值化和膨胀操作找出变化部分的轮廓。如果检测到变化过大且持续一分钟,就在窗口中显示时间和"alarm"。可以按下 'q' 键退出程序。

请注意,这只是一个简单的示例代码,可能需要根据实际情况进行调整和优化。另外,使用摄像头时,请确保摄像头设备可用,并在代码中正确设置摄像头索引值。


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

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