OPENCV,rects.push_back(mr);这句话是啥意思?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OPENCV,rects.push_back(mr);这句话是啥意思?相关的知识,希望对你有一定的参考价值。
vector<vector<Point> >::iterator itc= contours.begin();
vector<RotatedRect> rects;
//Remove patch that are no inside limits of aspect ratio and area.
while (itc!=contours.end())
//Create bounding rect of object
RotatedRect mr= minAreaRect(Mat(*itc));
if( !verifySizes(mr))
itc= contours.erase(itc);
else
++itc;
rects.push_back(mr);
rects.push_back(mr);这句话是什么意思?
它是一个vector对象啊,调用vector对象的push_back方法。
详细可以参考 c++ stl中的vector介绍。
OpenCV的全称是:Open Source Computer Vision Library。OpenCV是一个基于(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口。该库也有大量的Python, Java and MATLAB/OCTAVE (版本2.5)的接口。这些语言的API接口函数可以通过在线文档获得。如今也提供对于C#,Ch, Ruby的支持。
所有新的开发和算法都是用C++接口。一个使用CUDA的GPU接口也于2010年9月开始实现。 参考技术A vector<RotatedRect> rects;
它是一个vector对象啊,调用vector对象的push_back方法。
详细可以参考 c++ stl中的vector介绍。 参考技术B vector<RotatedRect> rects;
它是一个vector对象啊,调用vector对象的push_back方法。
详细可以参考 c++ stl中的vector介绍。本回答被提问者采纳
Python OpenCV开发MR智能人脸识别打卡系统(五程序入口设计与测试)
需要源码请点赞关注收藏后评论区留言私信~~~
整体系统讲解如下
Python OpenCV开发MR智能人脸识别打卡系统(一、需求分析与系统设计)
Python OpenCV开发MR智能人脸识别打卡系统(二、文件系统、数据实体模块设计)
Python OpenCV开发MR智能人脸识别打卡系统(三、工具模块设计)
Python OpenCV开发MR智能人脸识别打卡系统(四、服务模块设计)
main.py是整个程序的入口文件,负责在控制台中打印菜单界面,用户通过指令可以使用系统中的全部功能,包括打卡、员工管理等等,所以会有大量指令判断逻辑
下面详细介绍里面的代码
1:用户权限管理
系统中处理打卡和退出两项功能可以随意使用,其他菜单都需要管理员权限才能使用,用户选中查看记录,员工管理和考勤报表菜单,系统会验证用户身份,如果不是管理员身份就会弹出管理员登录提示,用户输入正确的账号和密码才可以继续使用这些功能
login为管理员登录方法,该方法弹出输入管理员账号和密码的提示,如果用户输入账号为字符串0,则认为用户取消了登录操作
def login():
while True:
username = input("请输入管理员账号(输入0取消操作):")
if username == "0": # 如果只输入0
return # 结束方法
passowrd = input("请输入管理员密码:")
if hr.valid_user(username.strip(), passowrd.strip()): # 校验账号密码
global ADMIN_LOGIN # 读取全局变量
ADMIN_LOGIN = True # 设置为管理员已登录状态
print(username + "登录成功!请选择重新选择功能菜单")
break
else:
print("账号或密码错误,请重新输入!")
print("---------------------------")
2:主菜单设计
start方法是程序的启动方法,在初始化方法执行完毕后执行,该方法在控制台中打印程序的主功能菜单,效果如下图所示
此时用户需要先输入菜单对应的数字,再按Enter键进入具体功能菜单中,如果用户输入的数字不再功能菜单中,则提示指令有误,请用户重新输入
用户需登录管理员账号才能使用员工管理功能
start方法具体代码如下
# 启动方法
def start():
finish = False # 程序结束标志
menu = """
+--------------------------------------------------+
| 主功能菜单 |
+--------------------------------------------------+
①打卡 ②查看记录 ③员工管理 ④考勤报表 ⑤退出
---------------------------------------------------"""
while not finish:
print(menu) # 打印菜单
option = input("请输入菜单序号:")
if option == "1": # 如果选择“打卡”
face_clock() # 启动人脸打卡
elif option == "2": # 如果选择“查看记录”
if ADMIN_LOGIN: # 如果管理员已登录
check_record() # 进入查看记录方法
else:
login() # 先让管理员登录
elif option == "3": # 如果选择“员工管理”
if ADMIN_LOGIN:
employee_management() # 进入员工管理方法
else:
login()
elif option == "4": # 如果选择“考勤报表”
if ADMIN_LOGIN:
check_report() # 进入考勤报表方法
else:
login()
elif option == "5": # 如果选择“退出”
finish = True # 确认结束,循环停止
else:
print("输入的指令有误,请重新输入!")
print("Bye Bye !")
hr.load_emp_data() # 数据初始化
tital = """
***************************************************
* MR智能视频打卡系统 *
***************************************************"""
print(tital) # 打印标题
start() # 启动程序
3:人脸打卡功能
face_clock是人脸打卡的功能执行方法,该方法调用摄像头工具模块提供的打卡方法,此时只要用户面向摄像头,摄像头即可自动扫描人脸并识别特征,如果镜头中的人脸符合某个员工的特征,则会返回该员工姓名,然后调用人事服务模块为此员工添加打卡记录
打卡者需正向面对镜头
def face_clock():
print("请正面对准摄像头进行打卡")
name = camera.clock_in() # 开启摄像头,返回打卡员工名称
if name is not None: # 如果员工名称有效
hr.add_lock_record(name) # 保存打卡记录
print(name + " 打卡成功!")
4:为新员工登记人脸照片样本
employee_management方法是员工管理功能的执行方法,该方法在控制台打印员工管理功能菜单,输入菜单对应的数字,再按Enter键进入具体功能菜单中
录入新员工的过程
5:删除员工全部数据
如果用户输入的验证码正确,那么该员工的全部信息都会被删除,验证码错误则不会删除,数据不会丢失
删除员工操作的过程
def employee_management():
menu = """+-------------------------------------------------+
| 员工管理功能菜单 |
+-------------------------------------------------+
①录入新员工 ②删除员工 ③返回上级菜单
---------------------------------------------------"""
while True:
print(menu) # 打印菜单
option = input("请输入菜单序号:")
if option == "1": # 如果选择“录入新员工”
name = str(input("请输入新员工姓名(输入0取消操作):")).strip()
if name != "0": # 只要输入的不是0
code = hr.add_new_employee(name) # 人事服务添加新员工,并获得该员工的特征码
print("请面对摄像头,敲击三次回车键完成拍照!")
camera.register(code) # 打开摄像头为员工照相
print("录入成功!")
# return # 退出员工管理功能菜单
elif option == "2": # 如果选择“删除员工”
# show_employee_all() # 展示员工列表
print(hr.get_employee_report()) # 打印员工信息报表
id = int(input("请输入要删除的员工编号(输入0取消操作):"))
if id > 0: # 只要输入的不是0
if hr.check_id(id): # 若此编号有对应员工
verification = tool.randomNumber(4) # 生成随机4位验证码
inputVer = input("[" + str(verification) + "] 请输入验证码:") # 让用户输入验证码
if str(verification) == str(inputVer).strip(): # 如果验证码正确
hr.remove_employee(id) # 人事服务删除该员工
print(str(id) + "号员工已删除!")
else: # 无效编号
print("验证码有误,操作取消")
else:
print("无此员工,操作取消")
elif option == "3": # 如果选择“返回上级菜单”
return # 退出员工管理功能菜单
else:
print("输入的指令有误,请重新输入!")
6:查询员工打卡记录
该方法在控制台打印查询记录功能菜单
查看员工列表
查看打卡记录
def check_record():
menu = """+-------------------------------------------------+
| 查看记录功能菜单 |
+-------------------------------------------------+
①查看员工列表 ②查看打卡记录 ③返回上级菜单
---------------------------------------------------"""
while True:
print(menu) # 打印菜单
option = input("请输入菜单序号:")
if option == "1": # 如果选择“查看员工列表”
print(hr.get_employee_report()) # 打印员工信息报表
elif option == "2": # 如果选择“查看打卡记录”
report = hr.get_record_all()
print(report)
elif option == "3": # 如果选择“返回上级菜单”
return # 退出查看记录功能菜单
else:
print("输入的指令有误,请重新输入!")
7:生成考勤报表
该方法是考勤报表功能的执行方法,该方法在控制台打印考勤报表功能菜单,效果如下图所示
可以生成考勤日报或者月报
# 考勤报表
def check_report():
menu = """+-------------------------------------------------+
| 考勤报表功能菜单 |
+-------------------------------------------------+
①日报 ②月报 ③报表设置 ④返回上级菜单
---------------------------------------------------"""
while True:
print(menu) # 打印菜单
option = input("请输入菜单序号:")
if option == "1": # 如果选择“日报”
while True:
date = input("输入查询日期,格式为(2008-08-08),输入0则查询今天:")
if date == "0": # 如果只输入0
hr.get_today_report() # 打印今天的日报
break # 打印完之后结束循环
elif tool.valid_date(date): # 如果输入的日期格式有效
hr.get_day_report(date) # 打印指定日期的日报
break # 打印完之后结束循环
else: # 如果输入的日期格式无效
print("日期格式有误,请重新输入!")
elif option == "2": # 如果选择“月报”
while True:
date = input("输入查询月份,格式为(2008-08),输入0则查询上个月:")
if date == "0": # 如果只输入0
hr.get_pre_month_report() # 生成上个月的月报
break # 生成完毕之后结束循环
elif tool.valid_year_month(date): # 如果输入的月份格式有效
hr.get_month_report(date) # 生成指定月份的月报
break # 生成完毕之后结束循环
else:
print("日期格式有误,请重新输入!")
elif option == "3": # 如果选择“报表设置”
report_config() # 进入“报表设置”菜单
elif option == "4": # 如果选择“返回上级菜单”
return # 退出查看记录功能菜单
else:
print("输入的指令有误,请重新输入!")
8:自定义上下班时间
用户在报表设置功能中输入数字1并按Enter键,则分别提示用户输入上班时间和下班时间
# 报表设置
def report_config():
menu = """+-------------------------------------------------+
| 报表设置功能菜单 |
+-------------------------------------------------+
①作息时间设置 ②返回上级菜单
---------------------------------------------------"""
while True:
print(menu) # 打印菜单
option = input("请输入菜单序号:")
if option == "1": # 如果选择“作息时间设置”
while True:
work_time = input("请设置上班时间,格式为(08:00:00):")
if tool.valid_time(work_time): # 如果时间格式正确
break # 结束循环
else: # 如果时间格式不对
print("上班时间格式错误,请重新输入")
while True:
close_time = input("请设置下班时间,格式为(23:59:59):")
if tool.valid_time(close_time): # 如果时间格式正确
break
else: # 如果时间格式不对
print("下班时间格式错误,请重新输入")
hr.save_work_time(work_time, close_time) # 保存用户设置的上班时间和下班时间
print("设置完成,上班时间:" + work_time + ",下班时间为:" + close_time)
elif option == "2": # 如果选择“返回上级菜单”
return # 退出查看记录功能菜单
else:
print("输入的指令有误,请重新输入!")
9:启动程序
main.py定义完所有全局变量和方法之后,代码的最下方就是整个系统的启动脚本,首先执行系统初始化操作,然后启动系统
创作不易 觉得有帮助请点赞关注收藏~~~
以上是关于OPENCV,rects.push_back(mr);这句话是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章
Python OpenCV开发MR智能人脸识别打卡系统(四服务模块设计)
Python OpenCV开发MR智能人脸识别打卡系统(五程序入口设计与测试)
关于 MagicalRecord,MR_saveNestedContexts 和 MR_save 方法有啥区别