OpenCV--高斯混合模型

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() #释放窗口

OpenCV--高斯混合模型_第1张图片

你可能感兴趣的:(OpenCV学习之路,opencv)