Python基于opencv调用摄像头获取个人图片的实现方法


Posted in Python onFebruary 21, 2019

接触图像领域的应该对于opencv都不会感到陌生,这个应该算是功能十分强劲的一个算法库了,当然了,使用起来也是很方便的,之前使用Windows7的时候出现多该库难以安装成功的情况,现在这个问题就不存在了,需要安装包的话可以去我的资源中下载使用,使用pip安装方式十分地便捷。

今天主要是基于opencv模块来调用笔记本的内置摄像头,然后从视频流中获取到人脸的图像数据用于之后的人脸识别项目,也就是为了构建可用的数据集。整个实现过程并不复杂,具体如下:

#!usr/bin/env python
#encoding:utf-8
'''
__Author__:沂水寒城
功能: Python opencv调用摄像头获取个人图片
使用方法:
    启动摄像头后需要借助键盘输入操作来完成图片的获取工作
    c(change): 生成存储目录
    p(photo): 执行截图
    q(quit): 退出拍摄
OpenCV简介
1、videoCapture()方法打开摄像
  摄像头变量 cv2.VideoCapture(n)  n为整数内置摄像头为0,若有其他摄像头则依次为1,2,3,...
  cap=cv2.VideoCapture(0) 打开内置摄像头
2、cap.isOpened()方法判断摄像头是否处于打开,返回结果为:True、False
3、ret,img=cap.read() 读取图像
  布尔变量,图像变量=cap.read() 
4、cap.release() 释放摄像头
5、action=cv2.waitKey(n) 获取用户输入,同时可获取按键的ASCLL码值
'''
import os
import cv2
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
def cameraAutoForPictures(saveDir='data/'):
  '''
  调用电脑摄像头来自动获取图片
  '''
  if not os.path.exists(saveDir):
    os.makedirs(saveDir)
  count=1 #图片计数索引
  cap=cv2.VideoCapture(0)
  width,height,w=640,480,360
  cap.set(cv2.CAP_PROP_FRAME_WIDTH,width)
  cap.set(cv2.CAP_PROP_FRAME_HEIGHT,height)
  crop_w_start=(width-w)//2
  crop_h_start=(height-w)//2
  print 'width: ',width
  print 'height: ',height
  while True:
    ret,frame=cap.read() #获取相框
    frame=frame[crop_h_start:crop_h_start+w,crop_w_start:crop_w_start+w] #展示相框
    frame=cv2.flip(frame,1,dst=None) #前置摄像头获取的画面是非镜面的,即左手会出现在画面的右侧,此处使用flip进行水平镜像处理
    cv2.imshow("capture", frame)
    action=cv2.waitKey(1) & 0xFF
    if action==ord('c'):
      saveDir=raw_input(u"请输入新的存储目录:")
      if not os.path.exists(saveDir):
        os.makedirs(saveDir)
    elif action==ord('p'):
      cv2.imwrite("%s/%d.jpg" % (saveDir,count),cv2.resize(frame, (224, 224),interpolation=cv2.INTER_AREA))
      print(u"%s: %d 张图片" % (saveDir,count))
      count+=1
    if action==ord('q'):
      break
  cap.release() #释放摄像头
  cv2.destroyAllWindows() #丢弃窗口
if __name__=='__main__':  
  cameraAutoForPictures(saveDir='data/')

上述代码的运行环境需要是Python2,因为python2中才有reload方法,去掉那些语句就可以在Python3中执行了,我们在Python2的环境中执行结果截图如下:

Python基于opencv调用摄像头获取个人图片的实现方法

我的保存路径是data,按q退出后,进入data文件夹下就可以看到自己的“靓照”了哈,好了数据集准备到此结束,接下来准备实战人脸识别。 

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

Python 相关文章推荐
python 判断一个进程是否存在
Apr 09 Python
python 链接和操作 memcache方法
Mar 04 Python
Python set常用操作函数集锦
Nov 15 Python
django在接受post请求时显示403forbidden实例解析
Jan 25 Python
通过Py2exe将自己的python程序打包成.exe/.app的方法
May 26 Python
Python实现简单的文本相似度分析操作详解
Jun 16 Python
Python3 关于pycharm自动导入包快捷设置的方法
Jan 16 Python
Python实现程序判断季节的代码示例
Jan 28 Python
Python实现DDos攻击实例详解
Feb 02 Python
PyQt5 QTable插入图片并动态更新的实例
Jun 18 Python
python常见字符串处理函数与用法汇总
Oct 30 Python
python线程里哪种模块比较适合
Aug 02 Python
python-itchat 获取微信群用户信息的实例
Feb 21 #Python
python 获取微信好友列表的方法(微信web)
Feb 21 #Python
Python基于mysql实现学生管理系统
Feb 21 #Python
python+mysql实现教务管理系统
Feb 20 #Python
python Tkinter版学生管理系统
Feb 20 #Python
啥是佩奇?使用Python自动绘画小猪佩奇的代码实例
Feb 20 #Python
Python实战购物车项目的实现参考
Feb 20 #Python
You might like
多php服务器实现多session并发运行
2006/10/09 PHP
php桌面中心(一) 创建数据库
2007/03/11 PHP
php获取apk包信息的方法
2014/08/15 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
2017/11/10 PHP
php成功操作redis cluster集群的实例教程
2019/01/13 PHP
PHP的mysqli_set_charset()函数讲解
2019/01/23 PHP
php分享朋友圈的实现代码
2019/02/18 PHP
使用PHPUnit进行单元测试并生成代码覆盖率报告的方法
2019/03/08 PHP
调试php程序的简单步骤
2019/10/04 PHP
大家未必知道的Js技巧收藏
2008/04/07 Javascript
javaScript 利用闭包模拟对象的私有属性
2011/12/29 Javascript
JavaScript面向对象之Prototypes和继承
2012/07/12 Javascript
jQuery学习笔记(2)--用jquery实现各种模态提示框代码及项目构架
2013/04/08 Javascript
form表单只提交数据而不进行页面跳转的解决方案
2013/09/18 Javascript
React Js 微信禁止复制链接分享禁止隐藏右上角菜单功能
2017/05/26 Javascript
Vue的Flux框架之Vuex状态管理器
2017/07/30 Javascript
详解mpvue中使用vant时需要注意的onChange事件的坑
2019/05/16 Javascript
判断“命令按钮”是否被鼠标单击详解
2019/07/31 Javascript
微信小程序学习总结(三)条件、模板、文件引用实例分析
2020/06/04 Javascript
[01:20]辉夜杯背景故事宣传片《辉夜传说》
2015/12/25 DOTA
Python中的闭包总结
2014/09/18 Python
使用Python实现画一个中国地图
2019/11/23 Python
IDLE下Python文件编辑和运行操作
2020/04/25 Python
python爬虫用scrapy获取影片的实例分析
2020/11/23 Python
CSS3 Backgrounds属性相关介绍
2011/05/11 HTML / CSS
html5 canvas实现给图片添加平铺水印
2019/08/20 HTML / CSS
李维斯牛仔裤英国官方网站:Levi’s英国
2019/10/10 全球购物
遗体告别仪式答谢词
2014/01/23 职场文书
给小学生的新年寄语
2014/04/04 职场文书
团队拓展活动方案
2014/08/28 职场文书
成本会计实训报告
2014/11/05 职场文书
2014小学语文教学工作总结
2014/12/17 职场文书
2015个人年度工作总结范文
2015/05/28 职场文书
Spring整合Mybatis的全过程
2021/06/28 Java/Android
MySQL数据库索引的最左匹配原则
2021/11/20 MySQL
Golang并发工具Singleflight
2022/05/06 Golang