python+openCV调用摄像头拍摄和处理图片的实现


Posted in Python onAugust 06, 2019

在深度学习过程中想做手势识别相关应用,需要大量采集手势图片进行训练,作为一个懒人当然希望飞快的连续采集图片并且采集到的图片就已经被处理成统一格式的啦。。于是使用python+openCV调用摄像头,在采集图片的同时顺便处理成想要的格式。

详细代码如下:

import cv2
import os

print("=============================================")
print("= 热键(请在摄像头的窗口使用):       =")
print("= z: 更改存储目录             =")
print("= x: 拍摄图片               =")
print("= q: 退出                 =")
print("=============================================")
print()
class_name = input("请输入存储目录:")
while os.path.exists(class_name):
  class_name = input("目录已存在!请输入存储目录:")
os.mkdir(class_name)

index = 1
cap = cv2.VideoCapture(0)
width = 640
height = 480
w = 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, height)

while True:
  # get a frame
  ret, frame = cap.read()
  # show a frame
  frame = frame[crop_h_start:crop_h_start+w, crop_w_start:crop_w_start+w]
  frame = cv2.flip(frame,1,dst=None)
  cv2.imshow("capture", frame)

  input = cv2.waitKey(1) & 0xFF

  if input == ord('z'):
    class_name = input("请输入存储目录:")
    while os.path.exists(class_name):
      class_name = input("目录已存在!请输入存储目录:")
    os.mkdir(class_name)
  elif input == ord('x'):
    cv2.imwrite("%s/%d.jpeg" % (class_name, index),
          cv2.resize(frame, (224, 224), interpolation=cv2.INTER_AREA))
    print("%s: %d 张图片" % (class_name, index))
    index += 1
  if input == ord('q'):
    break

    
cap.release()
cv2.destroyAllWindows()

要点记录:

当前版本opencv-python(3.4.3.18)中摄像头有关属性为cv2.XXXX,其获取和设置函数分别如下:(以帧的宽和高为例)

# 获取
width = int(videoCapture.get(cv2.CV_CAP_PROP_FRAME_WIDTH)
height = int(videoCapture.get(cv2.CV_CAP_PROP_FRAME_HEIGHT)
# 设置
cv2.VideoCapture(0).set(cv2.CAP_PROP_FRAME_WIDTH, width)
cv2.VideoCapture(0).set(cv2.CAP_PROP_FRAME_HEIGHT, height)

帧宽和高默认为640x480(这是窗口的大小),画面比例为显示器分辨率,例如我的显示器分辨率为1920x1080,则摄像头画面以640x360的大小显示在窗口中央,并用黑边填充上下部分,摄像头画面长宽比似乎无法被改变

read得到的帧(frame )可以视为普通的图像来处理,本质上这个程序就是不断read一张图片并显示在窗口上,因此可以使用opencv有关图像处理的各种函数对frame进行操作并显示,我这里就是使用这个原理裁剪frame,使摄像头画面显示成正方形

前置摄像头获取的画面是非镜面的,即左手会出现在画面的右侧,此处使用flip进行水平镜像处理

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用Python判断质数(素数)的简单方法讲解
May 05 Python
python anaconda 安装 环境变量 升级 以及特殊库安装的方法
Jun 21 Python
Odoo中如何生成唯一不重复的序列号详解
Feb 10 Python
Python实现字符串的逆序 C++字符串逆序算法
May 28 Python
mac安装scrapy并创建项目的实例讲解
Jun 13 Python
python制作抖音代码舞
Apr 07 Python
pandas 数据索引与选取的实现方法
Jun 21 Python
在django中图片上传的格式校验及大小方法
Jul 28 Python
python 常见的排序算法实现汇总
Aug 21 Python
用pip给python安装matplotlib库的详细教程
Feb 24 Python
Python list去重且保持原顺序不变的方法
Apr 03 Python
Python 快速验证代理IP是否有效的方法实现
Jul 15 Python
对Django 转发和重定向的实例详解
Aug 06 #Python
django 环境变量配置过程详解
Aug 06 #Python
PyQt5基本控件使用之消息弹出、用户输入、文件对话框的使用方法
Aug 06 #Python
如何在Django配置文件里配置session链接
Aug 06 #Python
在django中,关于session的通用设置方法
Aug 06 #Python
Django 对象关系映射(ORM)源码详解
Aug 06 #Python
Django中使用session保持用户登陆连接的例子
Aug 06 #Python
You might like
MySQL相关说明
2007/01/15 PHP
PHP中将字符串转化为整数(int) intval() printf() 性能测试
2020/03/20 PHP
CodeIgniter框架数据库事务处理的设计缺陷和解决方案
2014/07/25 PHP
php 无限级分类 获取顶级分类ID
2016/03/13 PHP
简单谈谈 php 文件锁
2017/02/19 PHP
JS动画效果代码3
2008/04/03 Javascript
javascript css float属性的特殊写法
2008/11/13 Javascript
jquery下实现overlay遮罩层代码
2010/08/25 Javascript
本地对象Array的原型扩展实现代码
2010/12/04 Javascript
jquery重新播放css动画所遇问题解决
2013/08/21 Javascript
JavaScript中的函数重载深入理解
2014/08/04 Javascript
node.js中的fs.fchmod方法使用说明
2014/12/16 Javascript
nw.js实现类似微信的聊天软件
2015/03/16 Javascript
javascript实现选中复选框后相关输入框变灰不可用的方法
2015/08/11 Javascript
Bootstrap页面布局基础知识全面解析
2016/06/13 Javascript
js注入 黑客之路必备!
2016/09/14 Javascript
详解ECMAScript6入门--Class对象
2017/04/27 Javascript
jQuery选择器之表单元素选择器详解
2017/09/19 jQuery
angular.js实现购物车功能
2017/10/23 Javascript
详解微信JS-SDK选择图片遇到的坑
2018/08/15 Javascript
react-router4按需加载(踩坑填坑)
2019/01/06 Javascript
微信小程序渲染性能调优小结
2019/07/30 Javascript
vue实现输入框的模糊查询的示例代码(节流函数的应用场景)
2019/09/01 Javascript
Node.js Domain 模块实例详解
2020/03/18 Javascript
vue+springboot+element+vue-resource实现文件上传教程
2020/10/21 Javascript
Python中使用PDB库调试程序
2015/04/05 Python
Python实现SVN的目录周期性备份实例
2015/07/17 Python
Python wxPython库使用wx.ListBox创建列表框示例
2018/09/03 Python
如何使用pyinstaller打包32位的exe程序
2019/05/26 Python
kali中python版本的切换方法
2019/07/11 Python
基于Python实现签到脚本过程解析
2019/10/25 Python
详解HTML5 window.postMessage与跨域
2017/05/11 HTML / CSS
瑞士设计师家具和家居饰品网上商店:Bruno Wickart
2019/03/18 全球购物
新教师培训方案
2014/06/08 职场文书
在pyCharm中下载第三方库的方法
2021/04/18 Python
java后台调用接口及处理跨域问题的解决
2022/03/24 Java/Android