1. 程式人生 > >用python獲取教室人數(粗糙版)

用python獲取教室人數(粗糙版)

最近在做一個有關教室視訊監控的專案,引用了一篇瀋陽大學畢業生的論文《基於監控視訊的高校教室佔有率統計系統》裡面的流程圖,這是一篇很好的論文,當然今天不是來說這篇論文的。
這是論文的下載地址:論文下載地址
下面就是自己寫的程式碼和對程式碼的解釋:
一、 程式碼內容:

# -*- coding: utf-8 -*-
"""
Created on Wed Sep 21 00:28:44 2016
@author: #riel
"""

import cv2
import numpy as np
import argparse
def pmain(img):
    def Key(*image)
:
for i in image: cv2.imshow('%s'%id(i),i) k = cv2.waitKey(0) &0xFF if k == ord('q'): return True return False result = 0 dst = cv2.cvtColor(img,cv2.COLOR_BGR2HSV_FULL) h,s,v = cv2.split(dst) v = cv2.inRange(v,0,64) # if Key(v):
# return result blur = cv2.GaussianBlur(v,(5,5),0) ret,thresh1 = cv2.threshold(blur,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU) ret,thresh2 = cv2.threshold(blur,100,255,cv2.THRESH_BINARY) # if Key(thresh1,thresh2): # return result kernel = np.ones((2,2),np.uint8) erosion = cv2.erode(thresh2,kernel,iterations = 1
) dilation = cv2.dilate(erosion,kernel,iterations = 1) # if Key(dilation): # return result circles = cv2.HoughCircles(dilation,cv2.cv.CV_HOUGH_GRADIENT,1,5,param1=5,param2=30,minRadius=0,maxRadius=0) circles = np.uint16(np.around(circles)) result = len(circles[0]) # for i in circles[0,:]: # cv2.circle(dilation,(i[0],i[1]),5,(0,255,0),1) # cv2.circle(dilation,(i[0],i[1]),1,(0,0,255),1) # result = result + 1 # if Key(img,dilation): # return result return result if __name__ == '__main__': ap = argparse.ArgumentParser() ap.add_argument("-p","--photo",help = "path to the photo file") ap.add_argument("-a","--min-area",type = int,default = 500,help = "minimun area size") args = vars(ap.parse_args()) if args.get("photo",None) is None: strings = r"photo.jpg" else : strings = args["photo"] img = cv2.imread(strings) print pmain(img) cv2.destroyAllWindows()

二、程式碼解釋:
1.獲取圖片:

 ap = argparse.ArgumentParser()
 ap.add_argument("-p","--photo",help = "path to the photo file")
ap.add_argument("-a","--min-area",type = int,default = 500,help = "minimun area size")
args = vars(ap.parse_args())
if args.get("photo",None) is None:
    strings = r"photo.jpg"
else :
    strings = args["photo"]

這裡獲取圖片分成兩種方法,第一種是用cmd執行程式碼,輸入圖片路徑,第二種則是使用程式碼中的已經設定好的圖片路徑:
cmd
圖中program’spath就是程式碼路徑
“-p”則是新增args引數,表示的是圖片的路徑photo’spath
2.Key函式,這個只是為了方便圖片的輸出而寫的一個函式,用系統給定的id作為視窗名字(好像沒有什麼好的方法直接呼叫引數的變數名作為視窗名字):

def Key(*image):
        for i in image:
            cv2.imshow('%s'%id(i),i)
        k = cv2.waitKey(0) &0xFF
        if k == ord('q'):
            return True
        return False

3、其餘的可以對照論文的流程來看,有什麼錯誤或者不懂歡迎私聊本人。
三、總結:
這個是直接利用了論文裡面的流程圖和指示寫的程式碼,對於自己做的專案有一些偏差,這說明了不是每個人的程式碼都可以直接拿過來用,首先是要去理解,然後根據自己的所需去改變,這樣才能把別人的東西變成自己的。

路途艱苦,天道酬勤。

注:本部落格為原創,若需轉載請註明出處。
注:若有侵權,請與本人聯絡刪部落格。