in_memory_advanced_frame_differencing.py

# 本作品采用MIT许可证授权。
# 版权所有 (c) 2013-2023 OpenMV LLC。保留所有权利。
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# 高级帧差分示例
#
# 此示例演示了如何使用OpenMV Cam进行帧差分。此
# 示例是高级的,因为它执行背景更新以处理
# 调整场景背景图像。

import csi
import image
import time

TRIGGER_THRESHOLD = 5

BG_UPDATE_FRAMES = 50  # 混合前的帧数。
BG_UPDATE_BLEND = 128  # 混合程度...([0-255]对应[0.0-1.0]范围)。

csi0 = csi.CSI()
csi0.reset()  # 重置并初始化传感器。
csi0.pixformat(csi.RGB565)  # 或csi.RGB565
csi0.framesize(csi.QVGA)  # 或csi.QQVGA(或其他)
csi0.snapshot(time=2000)  # 让新设置生效。
csi0.auto_whitebal(False)  # 关闭白平衡。
clock = time.clock()  # 跟踪FPS。

# 在堆上创建第二个帧缓冲区。
extra_fb = image.Image(csi0.width(), csi0.height(), csi0.pixformat())

print("About to save background image...")
csi0.snapshot(time=2000)  # 给用户时间准备。
extra_fb.draw_image(csi0.snapshot())
print("Saved background image - Now frame differencing!")

triggered = False

frame_count = 0
while True:
    clock.tick()  # 跟踪snapshots()之间经过的毫秒数。
    img = csi0.snapshot()  # 拍照并返回图像。

    frame_count += 1
    if frame_count > BG_UPDATE_FRAMES:
        frame_count = 0
        # 混入新帧。这里使用255-alpha,因为我们想要
        # 把新帧混合进背景,而不是把背景混合进
        # 新帧(那样就直接用alpha了)。混合将每个像素替换为
        # ((NEW*(alpha))+(OLD*(255-alpha)))/255。因此,低alpha意味着
        # 新图像的混合比例低,而高alpha意味着
        # 新图像的混合比例高。此次更新我们需要将其反过来。
        img.blend(extra_fb, alpha=(255 - BG_UPDATE_BLEND))
        extra_fb.draw_image(img)

    # 将图像替换为“abs(NEW-OLD)”帧差结果。
    img.difference(extra_fb)

    hist = img.get_histogram()
    # 下面的代码通过比较第99百分位值(即
    # 非离群的最大值)与第90百分位值(即非最大
    # 值)来工作。当差异图像中有更多像素变化时,
    # 这两个值之间的差距会增大。
    diff = hist.get_percentile(0.99).l_value - hist.get_percentile(0.90).l_value
    triggered = diff > TRIGGER_THRESHOLD

    print(clock.fps(), triggered)  # 注意:您的 OpenMV Cam 在连接到
    # 计算机时运行速度会减半。断开连接后,FPS 应该会增加。

results matching ""

    No results matching ""