• 大小: 5KB
    文件类型: .py
    金币: 1
    下载: 0 次
    发布日期: 2021-06-15
  • 语言: Python
  • 标签: Vibe  Python  

资源简介

该.py文件为基于vibe原理的目标检测Python代码。由于第一次写Python,程序运行比较慢,欢迎交流。 运行方式:将该文件和名称为video的avi文件放在同一个文件夹,然后运行即可。当然也可以在程序中修改待检测的视频文件名称。

资源截图

代码片段和文件信息

#! /usr/bin/env python
from cProfile import Profile
import pstats
import numpy as np
import cv2
import random
import time
import matplotlib.pyplot as plt
defaultNbSamples = 20
defaultReqMatches = 2
defaultRadius = 20
defaultSubsamplingFactor = 16
background = 0
foreground = 255


def Initial_ViBe(gray samples):

    # gray = cv2.cvtColor(img cv2.COLOR_BGR2GRAY)
    height = gray.shape[0]
    width = gray.shape[1]
    print(“*****Initlize Time******“)
    start1 = time.clock()
    for i in range(height):
        for j in range(width):
            for k in range(defaultNbSamples):
                rand = round(random.uniform(-1 1))
                r = i + rand
                if r < 0:
                    r = 0
                if r > height:
                    r = height - 1
                rand = round(random.uniform(-1 1))
                c = j + rand
                if c < 0:
                    c = 0
                if c > width:
                    c = width - 1
                samples[i][j][k] = gray[i][j]
            samples[i][j][defaultNbSamples - 1] = 0
    end = time.clock()
    print(end - start1)
    print(“******************************“)
    return samples


def update(gray samples):

    height = gray.shape[0]
    width = gray.shape[1]
    # print(height width)
    # segMat = np.zeros((gray.shape[0] gray.shape[1] 1) np.uint8)
    segMat = np.zeros((gray.shape[0] gray.shape[1] 1))
    for i in range(height):
        for j in range(width):
            count = 0
            idex = 0
            dist = 0
            # 遍历每个像素,判断与背景样本的相似程度
            while count < defaultReqMatches and idex < defaultNbSamples:
                dist = abs(gray[i][j] - samples[i][j][idex])
                if dist < defaultRadius:
                    # 统计相似度小于阈值的个数
                    count = count + 1
                idex = idex + 1
            # 大于#min,则认为该点为背景点
            if count >= defaultReqMatches:
                # 判断为背景像素,只有背景点才可以被用来传播和更新存储样本值
                samples[i][j][defaultNbSamples - 1] = 0
                # 输出二值图像用
                segMat[i][j] = background
                rand = round(random.uniform(0 defaultSubsamplingFactor - 1))
                if rand == 0:
                    rand = round(random.uniform(0 defaultNbSamples - 1))
                    samples[i][j][rand] = gray[i][j]
                rand = round(random.uniform(0 defaultSubsamplingFactor - 1))
                if rand == 0:
                    rand = round(random.uniform(-1 1))
                    iN = i + rand
                    # 以下是防止越界
                    if iN < 0:
                        iN = 0
                    if iN > height:
 

评论

共有 条评论