OpenCV--高斯混合模型

本文介绍了一种使用OpenCV库实现的视频背景检测和运动目标识别方法。通过实例化高斯混合模型并应用于视频流,实现了背景的动态检测。接着,通过对背景检测结果进行高斯滤波和形态学开运算,消除了噪音点。最后,通过检测轮廓并计算轮廓周长,筛选出较大的运动目标,并在原视频上标记出这些目标的位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

gaussian = cv2.createBackgroundSubtractorMOG2() #实例化高斯混合模型对象
frame_gaussian = gaussian.apply(frame) #对图像frame应用模型
import cv2
import numpy as np

#创建视频流对象
videocapture = cv2.VideoCapture("E:\\opencv\\object.avi")
#自定义椭圆形内核
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3,3))
#创建高斯混合模型
gaussian = cv2.createBackgroundSubtractorMOG2()

while(True):
    ret, frame = videocapture.read() #读取视频帧
    frame_gaussian = gaussian.apply(frame) #对每一帧应用高斯混合模型检测背景
    #对背景检测结果进行高斯滤波消除噪音点
    frame_comput = cv2.GaussianBlur(frame_gaussian, (5, 5), 0)
    #开运算(先腐蚀后膨胀)消除噪音点
    frame_comput = cv2.morphologyEx(frame_gaussian, cv2.MORPH_OPEN, kernel)
    #检测轮廓
    contours, hier = cv2.findContours(frame_comput, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

    for con in contours:
        perimeter = cv2.arcLength(con, True) #计算轮廓周长
        if perimeter > 188:
            x,y,w,h = cv2.boundingRect(con)  #寻找包络矩形
            #活出包络矩形
            rect = cv2.rectangle(frame, (x,y), (x+w,y+h), (255,0,0))
    #混合展示图像
    #将frame_gaussion堆成三通道图像
    frame_gaussian = np.dstack((frame_gaussian, frame_gaussian, frame_gaussian))
    frame_and_gaussian = np.hstack((frame, frame_gaussian))
    cv2.imshow('frame_and_gaussian', frame_and_gaussian)

    cv2.imwrite('E:\\opencv\\video_image\\frame_and_gaussian.jpg', frame_and_gaussian)

    k = cv2.waitKey(120) & 0xff
    if k == 27:  #指定ESC为退出键
        break

videocapture.release()  #释放视频流对象
cv2.destroyAllWindows() #释放窗口

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值