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的Django框架中为代码添加注释的方法
Jul 16 Python
详解Python文本操作相关模块
Jun 22 Python
对python:threading.Thread类的使用方法详解
Jan 31 Python
Python3.5迭代器与生成器用法实例分析
Apr 30 Python
django 消息框架 message使用详解
Jul 22 Python
python读取hdfs上的parquet文件方式
Jun 06 Python
解决tensorflow读取本地MNITS_data失败的原因
Jun 22 Python
python如何操作mysql
Aug 17 Python
详解pytorch中squeeze()和unsqueeze()函数介绍
Sep 03 Python
Python 调用 ES、Solr、Phoenix的示例代码
Nov 23 Python
python 模拟登录B站的示例代码
Dec 15 Python
pandas时间序列之pd.to_datetime()的实现
Jun 16 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
php 常用类整理
2009/12/23 PHP
PHP中shuffle数组值随便排序函数用法
2014/11/21 PHP
通过代码实例解析PHP session工作原理
2020/12/11 PHP
如何用javascript判断录入的日期是否合法
2007/01/08 Javascript
JavaScript asp.net 获取当前超链接中的文本
2009/04/14 Javascript
50个比较实用jQuery代码段
2011/09/18 Javascript
js如何调用qq互联api实现第三方登录
2014/03/28 Javascript
使用jquery实现的一个图片延迟加载插件(含图片延迟加载原理)
2014/06/05 Javascript
详解JavaScript中getFullYear()方法的使用
2015/06/10 Javascript
JavaScript之AOP编程实例
2015/07/17 Javascript
JS实现带有抽屉效果的产品类网站多级导航菜单代码
2015/09/15 Javascript
总结在前端排序中遇到的问题
2016/07/19 Javascript
关于JavaScript和jQuery的类型判断详解
2016/10/08 Javascript
将鼠标焦点定位到文本框最后(代码分享)
2017/01/11 Javascript
canvas实现绘制吃豆鱼效果
2017/01/12 Javascript
使用Bootstrap美化按钮实例代码(demo)
2017/02/03 Javascript
基于Bootstrap table组件实现多层表头的实例代码
2017/09/07 Javascript
JavaScript定义函数的三种实现方法
2017/09/23 Javascript
vue2.0路由切换后页面滚动位置不变BUG的解决方法
2018/03/14 Javascript
解决vue热替换失效的根本原因
2018/09/19 Javascript
[01:08:29]DOTA2-DPC中国联赛定级赛 RNG vs Aster BO3第一场 1月9日
2021/03/11 DOTA
Python的Django框架中的Context使用
2015/07/15 Python
Python 查看文件的编码格式方法
2017/12/21 Python
Python3 queue队列模块详细介绍
2018/01/05 Python
Django 根据数据模型models创建数据表的实例
2018/05/27 Python
Python 列表中的修改、添加和删除元素的实现
2020/06/11 Python
VICHY薇姿美国官方网站:欧洲药房第一的抗衰老品牌
2017/11/22 全球购物
达拉斯牛仔官方商店:Dallas Cowboys Pro Shop
2018/02/10 全球购物
WebSphere面试题:在WebSphere里面如何部署一个应用
2015/08/02 面试题
《云雀的心愿》教学反思
2014/02/25 职场文书
鸿星尔克广告词
2014/03/21 职场文书
2015教师年度工作总结范文
2015/04/07 职场文书
《跨越海峡的生命桥》教学反思
2016/02/18 职场文书
干货:我将这样书写我的演讲稿!
2019/05/09 职场文书
一文带你理解vue创建一个后台管理系统流程(Vue+Element)
2021/05/18 Vue.js
聊聊Python String型列表求最值的问题
2022/01/18 Python