程序示例精选

Python OpenCV识别行人入口进出人数统计

如需安装运行环境或远程调试,见文章底部微信名片,由专业技术人员远程协助!

前言

这篇博客针对《Python OpenCV识别行人入口进出人数统计》编写代码,功能包括了入口行人识别,人数统计。代码整洁,规则,易读。应用推荐首选。


文章目录

        一、所需工具软件

        二、使用步骤

                1. 引入库

                2. 识别特征图像

                3. 运行结果

         三、在线协助


一、所需工具软件

          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()
#用于后面形态学处理的核
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)#闭操作(膨胀->腐蚀)将区域连接起来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=Trueif cy in range(up_limit,down_limit):for i in persons:if abs(cx-i.getX())<=w and abs(cy-i.getY())<=h:new=Falsei.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/40print("In:执行了/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#状态为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():# 已经记过数且超出边界将其移出persons队列index = persons.index(i)persons.pop(index)del i  # 清楚内存中的第i个人if new == True:p = Person.MyPerson(pid, cx, cy, max_p_age)persons.append(p)pid += 1print("进入的总人数为:")
print(cnt_in)
print("出去的总人数为:")
print(cnt_out)
video.release();
cv2.destroyAllWindows()

3.运行结果如下:

三、在线协助: 

如需安装运行环境或远程调试,见文章底部微信名片,由专业技术人员远程协助!

Python OpenCV识别行人入口进出人数统计相关推荐

  1. Python+OpenCV 识别银行卡卡号

    Python+OpenCV 识别银行卡卡号 今天尝试一下用python+OpenCV,使用模板匹配的方式做个简单地识别银行卡卡号(大部分参考网上的,自己改了一部分,代码写的有点不太好,但是思路很清晰, ...

  2. 【Matlab人脸识别】形态学教室人数统计(带面板)【含GUI源码 1703期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]形态学教室人数统计(带面板)[含GUI源码 1703期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟 ...

  3. python图片识别-Python+Opencv识别两张相似图片

    在网上看到python做图像识别的相关文章后,真心感觉python的功能实在太强大,因此将这些文章总结一下,建立一下自己的知识体系. 当然了,图像识别这个话题作为计算机科学的一个分支,不可能就在本文简 ...

  4. python opencv 识别角度_OpenCV入门之获取图像的旋转角度

    在我们的日常生活中,所碰到的图像往往都有一定的倾斜.那么,如何用OpenCV来获取图像的旋转角度呢? 我们以下面的图片为例,简单介绍如何用OpenCV来获取图像的旋转角度. 可以看到,该图像存在着许多 ...

  5. Python+Opencv识别两张相似图片

    在网上看到python做图像识别的相关文章后,真心感觉python的功能实在太强大,因此将这些文章总结一下,建立一下自己的知识体系. 当然了,图像识别这个话题作为计算机科学的一个分支,不可能就在本文简 ...

  6. php 比对两张图片,Python+Opencv识别两张相似图片

    在网上看到python做图像识别的相关文章后,真心感觉python的功能实在太强大,因此将这些文章总结一下,建立一下自己的知识体系. 当然了,图像识别这个话题作为计算机科学的一个分支,不可能就在本文简 ...

  7. python opencv识别点个数_python+OpenCV 特征点检测

    1.Harris角点检测 Harris角点检测算法是一个极为简单的角点检测算法,该算法在1988年就被发明了,算法的主要思想是如果像素周围显示存在多于一个方向的边,我们认为该点为兴趣点.基本原理是根据 ...

  8. python人脸头发身体部位识别人数统计

    python人脸头发身体部位识别人数统计 如需安装运行环境或远程调试,可加QQ905733049, 或QQ2945218359由专业技术人员远程协助! 运行结果如下: 代码如下: import tim ...

  9. Python OpenCV车道线识别侦测

    Python OpenCV车道线识别侦测 如需安装运行环境或远程调试,可加QQ905733049, 或QQ2945218359由专业技术人员远程协助! 运行结果如下: 代码如下: import cv2 ...

最新文章

  1. 重磅:2020 Gitee 开源年报发布!
  2. 怎么查询linux中的组密码,linux查看用户组中的用户
  3. 4、Docker 提交运行中容器作为新的镜像
  4. 作为一名程序员,谁没跳过槽,“6”招让你“空降”大厂
  5. [NOIP2014]联合权值
  6. 项目不能使用fn标签_无服务器,Java和FN项目的第一步
  7. easyui 插入中间行
  8. JS实现大整数乘法(性能优化、正负整数)
  9. 零基础入门深度学习(7) - 递归神经网络
  10. 可以嵌入ppt的课堂点名器_宏大智慧课堂支招:孩子和学霸的差距,就在课上课下55分钟里...
  11. 为游戏多开做准备,降低游戏的CPU
  12. oracle编程弹框函数,取窗口句柄的api函数
  13. 小迪安全第10天 信息收集,资产监控拓展
  14. 第85节:Java中的JavaScript
  15. 闲置交易,二手交易,二手商城,同城交易,社交商城类APP源码
  16. 智能客服vs人工客服,两者真水火不容?
  17. 前端通过【bitly】Api,将长链接转换短连接
  18. 神秘的程序员头像包 第二发
  19. Elasticsearch API接口介绍
  20. 数据中台(元数据篇)

热门文章

  1. C语言自增(++)和自减(--)的前后的区别
  2. AutoCAD 出现“安全系统(软件锁许可管理器)不起作用或未正确安装”的解决方法...
  3. Java工程师岗位职责有哪些 职业发展前景怎么样
  4. AI、新材料、5G、智慧城市,未来的社会场景在高交会提前上演
  5. USB信号线标准定义
  6. 云计算与数据中心的误区
  7. medcalc app android,医学计算APP
  8. 红外传输单道心电遥测系统设计及工作原理
  9. 人工智能自然语言处理NLP入门教程
  10. sap制造业成本核算流程(转自互联网)