我的编程空间,编程开发者的网络收藏夹
学习永远不晚

详解Python人工智能混合高斯模型运动目标检测

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

详解Python人工智能混合高斯模型运动目标检测

本篇内容主要讲解“详解Python人工智能混合高斯模型运动目标检测”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“详解Python人工智能混合高斯模型运动目标检测”吧!

高斯算法提取工作

import cv2import numpy as np# 高斯算法class gaussian:    def __init__(self):        self.mean = np.zeros((1, 3))        self.covariance = 0        self.weight = 0;        self.Next = None        self.Previous = Noneclass Node:    def __init__(self):        self.pixel_s = None        self.pixel_r = None        self.no_of_components = 0        self.Next = Noneclass Node1:    def __init__(self):        self.gauss = None        self.no_of_comp = 0        self.Next = Nonecovariance0 = 11.0def Create_gaussian(info1, info2, info3):    ptr = gaussian()    if (ptr is not None):        ptr.mean[1, 1] = info1        ptr.mean[1, 2] = info2        ptr.mean[1, 3] = info3        ptr.covariance = covariance0        ptr.weight = 0.002        ptr.Next = None        ptr.Previous = None    return ptrdef Create_Node(info1, info2, info3):    N_ptr = Node()    if (N_ptr is not None):        N_ptr.Next = None        N_ptr.no_of_components = 1        N_ptr.pixel_s = N_ptr.pixel_r = Create_gaussian(info1, info2, info3)    return N_ptrList_node = []def Insert_End_Node(n):    List_node.append(n)List_gaussian = []def Insert_End_gaussian(n):    List_gaussian.append(n)def Delete_gaussian(n):    List_gaussian.remove(n);class Process:    def __init__(self, alpha, firstFrame):        self.alpha = alpha        self.background = firstFrame    def get_value(self, frame):        self.background = frame * self.alpha + self.background * (1 - self.alpha)        return cv2.absdiff(self.background.astype(np.uint8), frame)def denoise(frame):    frame = cv2.medianBlur(frame, 5)    frame = cv2.GaussianBlur(frame, (5, 5), 0)    return framecapture = cv2.VideoCapture('1.mp4')ret, orig_frame = capture.read( )if ret is True:    value1 = Process(0.1, denoise(orig_frame))    run = Trueelse:    run = Falsewhile (run):    ret, frame = capture.read()    value = False;    if ret is True:        cv2.imshow('input', denoise(frame))        grayscale = value1.get_value(denoise(frame))        ret, mask = cv2.threshold(grayscale, 15, 255, cv2.THRESH_BINARY)        cv2.imshow('mask', mask)        key = cv2.waitKey(10) & 0xFF    else:        break    if key == 27:        break    if value == True:        orig_frame = cv2.resize(orig_frame, (340, 260), interpolation=cv2.INTER_CUBIC)        orig_frame = cv2.cvtColor(orig_frame, cv2.COLOR_BGR2GRAY)        orig_image_row = len(orig_frame)        orig_image_col = orig_frame[0]        bin_frame = np.zeros((orig_image_row, orig_image_col))        value = []        for i in range(0, orig_image_row):            for j in range(0, orig_image_col):                N_ptr = Create_Node(orig_frame[i][0], orig_frame[i][1], orig_frame[i][2])                if N_ptr is not None:                    N_ptr.pixel_s.weight = 1.0                    Insert_End_Node(N_ptr)                else:                    print("error")                    exit(0)        nL = orig_image_row        nC = orig_image_col        dell = np.array((1, 3));        mal_dist = 0.0;        temp_cov = 0.0;        alpha = 0.002;        cT = 0.05;        cf = 0.1;        cfbar = 1.0 - cf;        alpha_bar = 1.0 - alpha;        prune = -alpha * cT;        cthr = 0.00001;        var = 0.0        muG = 0.0;        muR = 0.0;        muB = 0.0;        dR = 0.0;        dB = 0.0;        dG = 0.0;        rval = 0.0;        gval = 0.0;        bval = 0.0;        while (1):            duration3 = 0.0;            count = 0;            count1 = 0;            List_node1 = List_node;            counter = 0;            duration = cv2.getTickCount( );            for i in range(0, nL):                r_ptr = orig_frame[i]                b_ptr = bin_frame[i]                for j in range(0, nC):                    sum = 0.0;                    sum1 = 0.0;                    close = False;                    background = 0;                    rval = r_ptr[0][0];                    gval = r_ptr[0][0];                    bval = r_ptr[0][0];                    start = List_node1[counter].pixel_s;                    rear = List_node1[counter].pixel_r;                    ptr = start;                    temp_ptr = None;                    if (List_node1[counter].no_of_component > 4):                        Delete_gaussian(rear);                        List_node1[counter].no_of_component = List_node1[counter].no_of_component - 1;                    for k in range(0, List_node1[counter].no_of_component):                        weight = List_node1[counter].weight;                        mult = alpha / weight;                        weight = weight * alpha_bar + prune;                        if (close == False):                            muR = ptr.mean[0];                            muG = ptr.mean[1];                            muB = ptr.mean[2];                            dR = rval - muR;                            dG = gval - muG;                            dB = bval - muB;                            var = ptr.covariance;                            mal_dist = (dR * dR + dG * dG + dB * dB);                            if ((sum < cfbar) and (mal_dist < 16.0 * var * var)):                                background = 255;                            if (mal_dist < (9.0 * var * var)):                                weight = weight + alpha;                                if mult < 20.0 * alpha:                                    mult = mult;                                else:                                    mult = 20.0 * alpha;                                close = True;                                ptr.mean[0] = muR + mult * dR;                                ptr.mean[1] = muG + mult * dG;                                ptr.mean[2] = muB + mult * dB;                                temp_cov = var + mult * (mal_dist - var);                                if temp_cov < 5.0:                                    ptr.covariance = 5.0                                else:                                    if (temp_cov > 20.0):                                        ptr.covariance = 20.0                                    else:                                        ptr.covariance = temp_cov;                                temp_ptr = ptr;                        if (weight < -prune):                            ptr = Delete_gaussian(ptr);                            weight = 0;                            List_node1[counter].no_of_component = List_node1[counter].no_of_component - 1;                        else:                            sum += weight;                            ptr.weight = weight;                        ptr = ptr.Next;                    if (close == False):                        ptr = gaussian( );                        ptr.weight = alpha;                        ptr.mean[0] = rval;                        ptr.mean[1] = gval;                        ptr.mean[2] = bval;                        ptr.covariance = covariance0;                        ptr.Next = None;                        ptr.Previous = None;                        Insert_End_gaussian(ptr);                        List_gaussian.append(ptr);                        temp_ptr = ptr;                        List_node1[counter].no_of_components = List_node1[counter].no_of_components + 1;                    ptr = start;                    while (ptr != None):                        ptr.weight = ptr.weight / sum;                        ptr = ptr.Next;                    while (temp_ptr != None and temp_ptr.Previous != None):                        if (temp_ptr.weight <= temp_ptr.Previous.weight):                            break;                        else:                            next = temp_ptr.Next;                            previous = temp_ptr.Previous;                            if (start == previous):                                start = temp_ptr;                                previous.Next = next;                                temp_ptr.Previous = previous.Previous;                                temp_ptr.Next = previous;                            if (previous.Previous != None):                                previous.Previous.Next = temp_ptr;                            if (next != None):                                next.Previous = previous;                            else:                                rear = previous;                                previous.Previous = temp_ptr;                        temp_ptr = temp_ptr.Previous;                    List_node1[counter].pixel_s = start;                    List_node1[counter].pixel_r = rear;                    counter = counter + 1;capture.release()cv2.destroyAllWindows()

详解Python人工智能混合高斯模型运动目标检测

createBackgroundSubtractorMOG2

  • 背景减法 (BS) 是一种常用且广泛使用的技术,用于通过使用静态相机生成前景蒙版(即,包含属于场景中运动物体的像素的二值图像)。

  • 顾名思义,BS 计算前景蒙版,在当前帧和背景模型之间执行减法运算,其中包含场景的静态部分,或者更一般地说,根据观察到的场景的特征,可以将所有内容视为背景。

详解Python人工智能混合高斯模型运动目标检测

背景建模包括两个主要步骤:

  • 后台初始化;

  • 背景更新。

在第一步中,计算背景的初始模型,而在第二步中,更新该模型以适应场景中可能的变化。

import cv2#构造VideoCapture对象cap = cv2.VideoCapture('1.mp4')# 创建一个背景分割器# createBackgroundSubtractorMOG2()函数里,可以指定detectShadows的值# detectShadows=True,表示检测阴影,反之不检测阴影。默认是truefgbg  = cv2.createBackgroundSubtractorMOG2()while True :    ret, frame = cap.read() # 读取视频    fgmask = fgbg.apply(frame) # 背景分割    cv2.imshow('frame', fgmask) # 显示分割结果    if cv2.waitKey(100) & 0xff == ord('q'):        breakcap.release()cv2.destroyAllWindows()

详解Python人工智能混合高斯模型运动目标检测

到此,相信大家对“详解Python人工智能混合高斯模型运动目标检测”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

详解Python人工智能混合高斯模型运动目标检测

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

详解Python人工智能混合高斯模型运动目标检测

本篇内容主要讲解“详解Python人工智能混合高斯模型运动目标检测”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“详解Python人工智能混合高斯模型运动目标检测”吧!高斯算法提取工作import
2023-06-25

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录