model53new.py-20170921

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu Sep 21 21:50:11 2017

@author: vicky
"""

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Tue Sep 19 10:17:22 2017

@author: vicky
"""

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Mon Sep 18 14:12:01 2017

@author: vicky
"""

import numpy as np
import cv2
import matplotlib.pyplot as plt
import matplotlib.animation as animation


cap1 = cv2.VideoCapture('/Users/vicky/Desktop/第五问视频/4p-c0.mp4')
cap2 = cv2.VideoCapture('/Users/vicky/Desktop/第五问视频/4p-c1.mp4')
cap3 = cv2.VideoCapture('/Users/vicky/Desktop/第五问视频/4p-c2.mp4')
cap4 = cv2.VideoCapture('/Users/vicky/Desktop/第五问视频/4p-c3.mp4')
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5))#形态学运算,膨胀
fgbg = cv2.createBackgroundSubtractorMOG2()#视频的背景分割,Foreground Segmentation Algorithm
size = (int(cap1.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap1.get(cv2.CAP_PROP_FRAME_HEIGHT)))
fourcc=cv2.VideoWriter_fourcc('X','V','I','D')
out = cv2.VideoWriter('output.avi',fourcc,20.0,size)

firstFrame1 = None
firstFrame2 = None
firstFrame3 = None
firstFrame4 = None

xdata=np.array((0,0,0,0))
ydata=np.array((0,0,0,0))

#相机位置
c1=[0,0]
c2=[0,56]
c3=[56,0]
c4=[56,56]

count=0
while(1):
    ret1, frame1 = cap1.read(0)
    ret2, frame2 = cap2.read(0)
    ret3, frame3 = cap3.read(0)
    ret4, frame4 = cap4.read(0)
    if ret1 == True:
        fgmask1 = fgbg.apply(frame1)
        fgmask1 = cv2.morphologyEx(fgmask1, cv2.MORPH_OPEN, kernel)
        blured1 = cv2.bilateralFilter(fgmask1, 10, 5, 5)
        blured2 = cv2.GaussianBlur(fgmask1, (3, 3), 0)
        fgmask1 = blured2
        fgmask1 = closing = cv2.morphologyEx(fgmask1, cv2.MORPH_CLOSE, kernel)     
        #寻找视频中的轮廓
        im1, contours1, hierarchy1 = cv2.findContours(fgmask1, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
        for c in contours1:
            perimeter = cv2.arcLength(c,True)
            if perimeter >250:         
                #找到一个直矩形(不会旋转)
                x,y,w,h1 = cv2.boundingRect(c)
                #画出这个矩形
                cv2.rectangle(frame1,(x,y),(x+w,y+h1),(0,255,0),2)
  
        fgmask2 = fgbg.apply(frame2)
        fgmask2 = cv2.morphologyEx(fgmask2, cv2.MORPH_OPEN, kernel)
        blured1 = cv2.bilateralFilter(fgmask2, 10, 5, 5)
        blured2 = cv2.GaussianBlur(fgmask2, (3, 3), 0)
        fgmask2 = blured2
        fgmask2 = closing = cv2.morphologyEx(fgmask2, cv2.MORPH_CLOSE, kernel)     
        #寻找视频中的轮廓
        im, contours2, hierarchy = cv2.findContours(fgmask2, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
        for c in contours2:
            perimeter = cv2.arcLength(c,True)
            if perimeter >250:         
                #找到一个直矩形(不会旋转)
                x,y,w,h2 = cv2.boundingRect(c)
                #画出这个矩形
                cv2.rectangle(frame2,(x,y),(x+w,y+h2),(0,255,0),2)
        
        fgmask3 = fgbg.apply(frame3)
        fgmask3 = cv2.morphologyEx(fgmask3, cv2.MORPH_OPEN, kernel)
        blured1 = cv2.bilateralFilter(fgmask3, 10, 5, 5)
        blured2 = cv2.GaussianBlur(fgmask3, (3, 3), 0)
        fgmask3 = blured2
        fgmask3 = closing = cv2.morphologyEx(fgmask3, cv2.MORPH_CLOSE, kernel)     
        #寻找视频中的轮廓
        im, contours3, hierarchy = cv2.findContours(fgmask3, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
        for c in contours3:
            perimeter = cv2.arcLength(c,True)
            if perimeter >250:         
                #找到一个直矩形(不会旋转)
                x,y,w,h3 = cv2.boundingRect(c)
                #画出这个矩形
                cv2.rectangle(frame3,(x,y),(x+w,y+h3),(0,255,0),2)
                
        fgmask4 = fgbg.apply(frame4)
        fgmask4 = cv2.morphologyEx(fgmask4, cv2.MORPH_OPEN, kernel)
        blured1 = cv2.bilateralFilter(fgmask4, 10, 5, 5)
        blured2 = cv2.GaussianBlur(fgmask4, (3, 3), 0)
        fgmask4 = blured2
        fgmask4 = closing = cv2.morphologyEx(fgmask4, cv2.MORPH_CLOSE, kernel)     
        #寻找视频中的轮廓
        im, contours4, hierarchy = cv2.findContours(fgmask4, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
        for c in contours4:
            perimeter = cv2.arcLength(c,True)
            if perimeter >200:         
                #找到一个直矩形(不会旋转)
                x,y,w,h4 = cv2.boundingRect(c)
                #画出这个矩形
                cv2.rectangle(frame4,(x,y),(x+w,y+h4),(0,255,0),2)

        #单目测距
        d1=0.01*h1/1.8
        d2=0.01*h2/1.8
        d3=0.01*h3/1.8
        d4=0.01*h4/1.8
        dmax=max(d1,d2,d3,d4)
        d1=d1*56/dmax
        d2=d2*56/dmax
        d3=d3*56/dmax
        d4=d4*56/dmax
        
        #俯视图划分成56*56的网格                          
        grid1=np.zeros((56,56))
        grid2=np.zeros((56,56))
        grid3=np.zeros((56,56))
        grid4=np.zeros((56,56))
        
        for i in range(56):
            for j in range(56):
                if (np.linalg.norm(np.array([i,j])-np.array(c1))<d1+1 and
                    np.linalg.norm(np.array([i,j])-np.array(c1))>d1-1):
                    grid1[i,j]=grid1[i,j]+np.linalg.norm(np.array([i,j])-np.array(c1))
                if (np.linalg.norm(np.array([i,j])-np.array(c2))<d2+1 and
                    np.linalg.norm(np.array([i,j])-np.array(c2))>d2-1):
                    grid2[i,j]=grid2[i,j]+np.linalg.norm(np.array([i,j])-np.array(c2))
                if (np.linalg.norm(np.array([i,j])-np.array(c3))<d3+1 and
                    np.linalg.norm(np.array([i,j])-np.array(c3))>d3-1):
                    grid3[i,j]=grid3[i,j]+np.linalg.norm(np.array([i,j])-np.array(c3))
                if (np.linalg.norm(np.array([i,j])-np.array(c4))<d4+1 and
                    np.linalg.norm(np.array([i,j])-np.array(c4))>d4-1):
                    grid4[i,j]=grid4[i,j]+np.linalg.norm(np.array([i,j])-np.array(c4))

        Grid1=grid1/np.max(grid1)
        Grid2=grid2/np.max(grid2)
        Grid3=grid3/np.max(grid3)
        Grid4=grid4/np.max(grid4)
        
        grid=np.array(grid1+grid2+grid3+grid4)
        #找出概率最大值的位置ad1,ad2,ad3,ad4            
        ad1=[np.array(np.where(Grid1==np.max(Grid1)))[0,0],np.array(np.where(Grid1==np.max(Grid1)))[1,0]]  
        ad2=[np.array(np.where(Grid2==np.max(Grid2)))[0,0],np.array(np.where(Grid2==np.max(Grid2)))[1,0]]  
        ad3=[np.array(np.where(Grid3==np.max(Grid3)))[0,0],np.array(np.where(Grid3==np.max(Grid3)))[1,0]]  
        ad4=[np.array(np.where(Grid4==np.max(Grid4)))[0,0],np.array(np.where(Grid4==np.max(Grid4)))[1,0]]  
        #保存在向量xdata,ydata中
        xdata=np.vstack((xdata,np.array((ad1[0],ad2[0],ad3[0],ad4[0]))))
        ydata=np.vstack((ydata,np.array((ad1[1],ad2[1],ad3[1],ad4[1]))))
        
        #out.wrte(fgmask1)
        cv2.namedWindow('frame1',cv2.WINDOW_NORMAL)#调整窗口
        cv2.imshow('frame1',frame1)
        cv2.namedWindow('fgmask1',cv2.WINDOW_NORMAL)#调整窗口
        cv2.imshow('fgmask1',fgmask1) 
        cv2.namedWindow('frame2',cv2.WINDOW_NORMAL)#调整窗口
        cv2.imshow('frame2',frame2)
        cv2.namedWindow('fgmask2',cv2.WINDOW_NORMAL)#调整窗口
        cv2.imshow('fgmask2',fgmask2)
        cv2.namedWindow('frame3',cv2.WINDOW_NORMAL)#调整窗口
        cv2.imshow('frame3',frame3)
        cv2.namedWindow('fgmask3',cv2.WINDOW_NORMAL)#调整窗口
        cv2.imshow('fgmask3',fgmask3)
        cv2.namedWindow('frame4',cv2.WINDOW_NORMAL)#调整窗口
        cv2.imshow('frame4',frame4)
        cv2.namedWindow('fgmask4',cv2.WINDOW_NORMAL)#调整窗口
        cv2.imshow('fgmask4',fgmask4)   
        
    else:
        break

    if cv2.waitKey(25) & 0xFF == ord('q'):
        break
    
out.release()
cap1.release()
cv2.destroyAllWindows()


(n,p)=np.shape(xdata)
for i in range(n):
    fig = plt.figure()
    ax = fig.gca()
    plt.axis([0, 56, 0, 56],'equal')
    ax.set_xticks(np.arange(0, 56, 1))
    ax.set_yticks(np.arange(0, 56, 1))
    plt.scatter(xdata[i,],ydata[i,],c = ('r','b','g','k'),marker = 'o')
    plt.grid()
    fig.set_size_inches(18.5, 10.5)
    img =plt.gcf()
    #plt.show()
    img.savefig('/Users/vicky/Desktop/第五问视频/img'+np.str(i)+'.jpg')
#    img_data = np.asarray(img)
#    video.write(img_data)
#    img2 = np.empty([IMAGE_SIZE, IMAGE_SIZE, 3], dtype=type(RED[0]))
#    cv2.imshow('video', img)    
#    ani = animation.FuncAnimation(img,update_img,300,interval=30)
#    writer = animation.writers['ffmpeg'](fps=30)
#
#    ani.save('demo.mp4',writer=writer,dpi=dpi)

#video.release()
    
import glob as gb

img_path = gb.glob("/Users/vicky/Desktop/第五问视频/img/.jpg") 
#videoWriter = cv2.VideoWriter('test.mp4', cv2.VideoWriter_fourcc(*'MJPG'), 25, (640,480))
videoWriter = cv2.VideoWriter('img.avi', fourcc, 20.0,size)

for path in img_path:
    img  = cv2.imread(path) 
    #img = cv2.resize(img,(640,480))
    videoWriter.write(img)

videoWriter.release()  
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值