欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python?OpenCV識別行人入口進出人數(shù)統(tǒng)計

 更新時間:2023年01月06日 08:23:55   作者:alicema1111  
本文主要介紹了Python?OpenCV識別行人入口進出人數(shù)統(tǒng)計,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧<BR>

前言

這篇博客針對《Python OpenCV識別行人入口進出人數(shù)統(tǒng)計》編寫代碼,功能包括了入口行人識別,人數(shù)統(tǒng)計。代碼整潔,規(guī)則,易讀。應用推薦首選。

一、所需工具軟件

1. Python3.6以上
2. Pycharm代碼編輯器
3. OpenCV, Numpy庫

二、使用步驟

1.引入庫

代碼如下(示例):

#導入需要的包
import numpy as np
import cv2
import Person
import time

2.識別特征圖像

代碼如下(示例):

video=cv2.VideoCapture("counting_test.avi")
#輸出視頻
fourcc = cv2.VideoWriter_fourcc(*'XVID')#輸出視頻制編碼
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))
 
w = video.get(3)
h = video.get(4)
print("視頻的原寬度為:")
print(int(w))
print("視頻的原高度為:")
area = h*w
print(int(h))
areaTHreshold = area/500
print('Area Threshold', areaTHreshold)
 
#計算畫線的位置
line_up = int(1*(h/4))
line_down = int(2.7*(h/4))
up_limit = int(.5*(h/4))
down_limit = int(3.2*(h/4))
print ("Red line y:",str(line_down))
print ("Green line y:", str(line_up))
 
pt5 = [0, up_limit]
pt6 = [w, up_limit]
pts_L3 = np.array([pt5,pt6], np.int32)
pts_L3 = pts_L3.reshape((-1,1,2))
pt7 =  [0, down_limit]
pt8 =  [w, down_limit]
pts_L4 = np.array([pt7,pt8], np.int32)
pts_L4 = pts_L4.reshape((-1,1,2))
#背景剔除
# fgbg = cv2.createBackgroundSubtractorMOG2(detectShadows = True)
fgbg = cv2.createBackgroundSubtractorKNN()
#用于后面形態(tài)學處理的核
kernel = np.ones((3,3),np.uint8)
kerne2 = np.ones((5,5),np.uint8)
kerne3 = np.ones((11,11),np.uint8)
 
while(video.isOpened()):
    ret,frame=video.read()
    if frame is None:
        break
    #應用背景剔除
    gray = cv2.GaussianBlur(frame, (31, 31), 0)
    #cv2.imshow('GaussianBlur', frame)
    #cv2.imshow('GaussianBlur', gray)
    fgmask = fgbg.apply(gray)
    fgmask2 = fgbg.apply(gray)
 
    try:
        #***************************************************************
        #二值化
        ret,imBin= cv2.threshold(fgmask,200,255,cv2.THRESH_BINARY)
        ret,imBin2 = cv2.threshold(fgmask2,200,255,cv2.THRESH_BINARY)
        #cv2.imshow('imBin', imBin2)
        #開操作(腐蝕->膨脹)消除噪聲
        mask = cv2.morphologyEx(imBin, cv2.MORPH_OPEN, kerne3)
        mask2 = cv2.morphologyEx(imBin2, cv2.MORPH_OPEN, kerne3)
        #閉操作(膨脹->腐蝕)將區(qū)域連接起來
        mask =  cv2.morphologyEx(mask , cv2.MORPH_CLOSE, kerne3)
        mask2 = cv2.morphologyEx(mask2, cv2.MORPH_CLOSE, kerne3)
        #cv2.imshow('closing_mask', mask2)
        #*************************************************************
    except:
        print('EOF')
        print ('IN:',cnt_in+count_in)
        print ('OUT:',cnt_in+count_in)
        break
 
    #找到邊界
    _mask2,contours0, hierarchy = cv2.findContours(mask2, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    for cnt in contours0:
        rect = cv2.boundingRect(cnt)#矩形邊框
        area=cv2.contourArea(cnt)#每個矩形框的面積
        if area>areaTHreshold:
            #************************************************
            #moments里包含了許多有用的信息
            M=cv2.moments(cnt)
            cx=int(M['m10']/M['m00'])#計算重心
            cy=int(M['m01']/M['m00'])
            x, y, w, h = cv2.boundingRect(cnt)#x,y為矩形框左上方點的坐標,w為寬,h為高
            new=True
            if cy in range(up_limit,down_limit):
                for i in persons:
                    if abs(cx-i.getX())<=w and abs(cy-i.getY())<=h:
                        new=False
                        i.updateCoords(cx,cy)
                        if i.going_UP(line_down,line_up)==True:
                            # cv2.circle(frame, (cx, cy), 5, line_up_color, -1)
                            # img = cv2.rectangle(frame, (x, y), (x + w, y + h), line_up_color, 2)
                            if w>80:
                                count_in=w/40
                                print("In:執(zhí)行了/60")
               time.strftime("%c"))
                        elif i.going_DOWN(line_down,line_up)==True:
                            # cv2.circle(frame, (cx, cy), 5, (0, 0, 255), -1)
                            # img = cv2.rectangle(frame, (x, y), (x + w, y + h), line_down_color, 2)
time.strftime("%c"))
                        break
                        #狀態(tài)為1表明
                    if i.getState() == '1':
                        if i.getDir() == 'down' and i.getY() > down_limit:
                            i.setDone()
                        elif i.getDir() == 'up' and i.getY() < up_limit:
                            i.setDone()
                    if i.timedOut():
                        # 已經(jīng)記過數(shù)且超出邊界將其移出persons隊列
                        index = persons.index(i)
                        persons.pop(index)
                        del i  # 清楚內(nèi)存中的第i個人
                if new == True:
                    p = Person.MyPerson(pid, cx, cy, max_p_age)
                    persons.append(p)
                    pid += 1
 
print("進入的總人數(shù)為:")
print(cnt_in)
print("出去的總人數(shù)為:")
print(cnt_out)
video.release();
cv2.destroyAllWindows()

3.運行結果如下: 

到此這篇關于Python OpenCV識別行人入口進出人數(shù)統(tǒng)計的文章就介紹到這了,更多相關OpenCV人數(shù)統(tǒng)計內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 對Python Pexpect 模塊的使用說明詳解

    對Python Pexpect 模塊的使用說明詳解

    今天小編就為大家分享一篇對Python Pexpect 模塊的使用說明詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • Python入門教程(三十五)Python中文件的打開

    Python入門教程(三十五)Python中文件的打開

    這篇文章主要介紹了Python入門教程(三十五)Python中文件的打開,在Python中文件的讀取主要是用open()函數(shù),那么open()函數(shù)有哪些方法呢,今天我們就來看一看,需要的朋友可以參考下
    2023-05-05
  • python實現(xiàn)下載pop3郵件保存到本地

    python實現(xiàn)下載pop3郵件保存到本地

    這篇文章主要為大家詳細介紹了python實現(xiàn)下載pop3郵件保存到本地的代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Python合并字符串的3種方法

    Python合并字符串的3種方法

    這篇文章主要介紹了Python合并字符串的3種方法,本文講解了使用+=操作符、使用%操作符、使用String的' '.join()方法3種方法,需要的朋友可以參考下
    2015-05-05
  • 如何使用Numpy創(chuàng)建三維矩陣

    如何使用Numpy創(chuàng)建三維矩陣

    這篇文章主要介紹了如何使用Numpy創(chuàng)建三維矩陣問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • python?函數(shù)定位參數(shù)+關鍵字參數(shù)+inspect模塊

    python?函數(shù)定位參數(shù)+關鍵字參數(shù)+inspect模塊

    這篇文章主要介紹了python?函數(shù)定位參數(shù)+關鍵字參數(shù)+inspect模塊,文章圍繞主題展開詳細的相關資料,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • python?graphviz畫圖詳情

    python?graphviz畫圖詳情

    這篇文章主要介紹了python?graphviz畫圖詳情,文章圍繞graphviz畫圖的相關資料展開內(nèi)容,并附有官方安裝鏈接,需要的小伙伴可以參考一下,洗碗給對你有所幫助
    2021-12-12
  • python基礎教程之面向對象的一些概念

    python基礎教程之面向對象的一些概念

    這篇文章主要介紹了python基礎教程之面向對象的一些概念,面向對象是一種代碼組織方式,讓代碼復用最大化,需要的朋友可以參考下
    2014-08-08
  • Python中Numpy包的安裝與使用方法簡明教程

    Python中Numpy包的安裝與使用方法簡明教程

    這篇文章主要介紹了Python中Numpy包的安裝與使用方法,結合簡單實例形式分析了Python使用pip命令在線與離線whl包安裝,以及使用numpy打印隨機數(shù)矩陣的操作技巧,需要的朋友可以參考下
    2018-07-07
  • Python實現(xiàn)將json文件生成C語言的結構體的腳本分享

    Python實現(xiàn)將json文件生成C語言的結構體的腳本分享

    這篇文章主要為大家詳細介紹了Python如何實現(xiàn)將json文件生成C語言的結構體,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2022-09-09

最新評論