model4.py

机场视频监控目标检测
本文介绍了一种使用OpenCV库中的BackgroundSubtractorMOG2算法进行背景减除的方法,并通过形态学运算去除噪声,最终实现对机场监控视频中运动目标的有效检测。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sat Sep 16 18:18:40 2017

@author: vicky
"""

# -*- coding: utf-8 -*-
import numpy as np
import cv2

#第三问加一个去除噪声的处理

#BackgroundSubtractorMOG2
#opencv自带的一个视频
cap = cv2.VideoCapture('/Users/vicky/Desktop/附件2-典型视频/不带晃动-静态背景/airport/input.mov')
#创建一个3*3的椭圆核
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(3,3))
#创建BackgroundSubtractorMOG2
fgbg = cv2.createBackgroundSubtractorMOG2()
#fgbg = cv2.createBackgroundSubtractorKNN()
# Define the codec and create VideoWriter object
#size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
#fourcc = cv2.VideoWriter_fourcc(*'DIVX')  # 'x264' doesn't work
#out = cv2.VideoWriter('output_carboom.mp4',fourcc, 29.0, size, False)  # 'False' for 1-ch instead of 3-ch for color
fps = cap.get(cv2.CAP_PROP_FPS)
size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
out = cv2.VideoWriter('output.avi', -1, fps, size)

Count  = 0
ZH = []
while(1):
    ret, frame = cap.read()
    fgmask = fgbg.apply(frame)
    #形态学开运算去噪点
    fgmask = cv2.morphologyEx(fgmask, cv2.MORPH_OPEN, kernel)
    #寻找视频中的轮廓
    im, contours, hierarchy = cv2.findContours(fgmask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

    for c in contours:
        #计算各轮廓的周长
        perimeter = cv2.arcLength(c,True)
        if perimeter > 1000:
            #找到一个直矩形(不会旋转)
            x,y,w,h = cv2.boundingRect(c)
            #画出这个矩形
            cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),2)
            print(Count)
            ZH.append(Count)
    out.write(fgmask)
    cv2.namedWindow('frame',cv2.WINDOW_NORMAL)#调整窗口
    cv2.namedWindow('fgmask',cv2.WINDOW_NORMAL)#调整窗口
    cv2.imshow('frame',frame)
    cv2.imshow('fgmask', fgmask)
    #k = cv2.waitKey(1) & 0xff == ord('q')
    #if k == 300:
    #    break
    Count += 1
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break


print('***************')
print(ZH)
print(np.unique(ZH))
print(len(np.unique(ZH)))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值