model2.py-20170919

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sat Sep 16 15:56:39 2017

@author: vicky
"""

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

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

 #BackgroundSubtractorMOG2
 #opencv自带的一个视频
 cap = cv2.VideoCapture('/Users/vicky/Desktop/附件2-典型视频/有晃动-静态背景/cars6/input.mov')
 #创建一个3*3的椭圆核
 kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(3,3)) #形态学运算,膨胀
 #创建BackgroundSubtractorMOG2,
 fgbg = cv2.createBackgroundSubtractorMOG2()#视频的背景分割,Foreground Segmentation Algorithm
 #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('X','V','I','D')
 out = cv2.VideoWriter('output_Escalator.avi',fourcc,20.0,size)

 #fourcc = cv2.VideoWriter_fourcc(*'DIVX')  # 'x264' doesn't work
 #out = cv2.VideoWriter('output.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_escalator.avi', -1, fps, size)

 Count  = 0
 ZH = []
 while(1):
     ret, frame = cap.read(0)
     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 > 188:
             # 用绿色(0, 255, 0)来画出最小的矩形框架
             #找到一个直矩形(不会旋转)
             x,y,w,h = cv2.boundingRect(c)
             #画出这个矩形
             cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),2)
    
             # 用红色表示有旋转角度的矩形框架
             rect = cv2.minAreaRect(c)
             box = cv2.boxPoints(rect)
             box = np.int0(box)
             cv2.drawContours(frame, [box], 0, (0, 0, 255), 2)
             #cv2.imwrite('contours.png', frame)
    
             print(Count)
             ZH.append(Count)
         out.write(frame)
         #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
     if cv2.waitKey(25) & 0xFF == ord('q'):
         break

 Count += 1
 print(ZH)
 print(np.unique(ZH))
 print(len(np.unique(ZH)))
 cap.release()
 cv2.destroyAllWindows()
 
 
 
 # -*- coding: utf-8 -*-
#import cv2
#
#cap = cv2.VideoCapture('/Users/vicky/Desktop/附件3-检测前景视频/escalator/Escalator.avi')
##创建一个3*3的椭圆核
#kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5))
##创建BackgroundSubtractorMOG2
#fgbg = cv2.createBackgroundSubtractorKNN()
## Define the codec and create VideoWriter object
#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_curtain.avi', -1, fps, size)
#fourcc=cv2.VideoWriter_fourcc('X','V','I','D')
#out = cv2.VideoWriter('output_Escalator.avi',fourcc,20.0,size)
#
#while(1):
#    ret, frame = cap.read(0)
#    if ret == True:
#        img_new = frame
#        fgmask = fgbg.apply(img_new)
#        # 形态学开运算去噪点
#        #fgmask = cv2.morphologyEx(fgmask, cv2.MORPH_OPEN, kernel)
#        #平滑方式去除噪声,
#        blured1 = cv2.bilateralFilter(fgmask, 10, 5, 5)
#        blured2 = cv2.GaussianBlur(fgmask, (3, 3), 0)
#        blured3 = cv2.blur(fgmask, (5, 5))
#        blured4 = cv2.medianBlur(fgmask, 7)
#        fgmask = blured2
#        # 闭运算去噪点
#        fgmask = closing = cv2.morphologyEx(fgmask, cv2.MORPH_CLOSE, 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 > 20 and perimeter < 100:
#                #找到一个直矩形(不会旋转)
#                x,y,w,h = cv2.boundingRect(c)
#                #画出这个矩形
#                cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),2)
#        out.write(fgmask)
#        cv2.imshow('frame',frame)
#        cv2.imshow('fgmask', fgmask)
#    else:
#        break
#
#    if cv2.waitKey(25) & 0xFF == ord('q'):
#        break
#cap.release()
#cv2.destroyAllWindows()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值