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

在深度学习过程中想做手势识别相关应用,需要大量采集手势图片进行训练,作为一个懒人当然希望飞快的连续采集图片并且采集到的图片就已经被处理成统一格式的啦。。于是使用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进行水平镜像处理

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

(0)

相关推荐

  • python版opencv摄像头人脸实时检测方法

    OpenCV版本3.3.0,注意模型文件的路径要改成自己所安装的opencv的模型文件的路径,路径不对就会报错,一般在opencv-3.3.0/data/haarcascades 路径下 import numpy as np import cv2 face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') cap = cv2.VideoCapture(0) while True: ret,img = ca

  • python opencv摄像头的简单应用

    本文实例为大家分享了python opencv摄像头应用的具体代码,供大家参考,具体内容如下 1.安装 下载安装包 pip install opencv_python-2.4.12-cp27-none-win_amd64.whl 2.代码 #coding=utf-8 import cv2 import time cap=cv2.VideoCapture(0) #读取摄像头,0表示系统默认摄像头 while True: ret,photo=cap.read() #读取图像 cv2.imshow('

  • Python OpenCV利用笔记本摄像头实现人脸检测

    本文实例为大家分享了Python OpenCV利用笔记本摄像头实现人脸检测的具体代码,供大家参考,具体内容如下 1.安装opencv 首先参考其他文章安装pip. 之后以管理员身份运行命令提示符,输入以下代码安装opencv pip install --user opencv-python 可以使用以下代码测试安装是否成功 #导入opencv模块 import cv2 #捕捉帧,笔记本摄像头设置为0即可 capture = cv2.VideoCapture(0) #循环显示帧 while(Tru

  • python opencv设置摄像头分辨率以及各个参数的方法

    1,为了获取视频,你应该创建一个 VideoCapture 对象.他的参数可以是设备的索引号,或者是一个视频文件.设备索引号就是在指定要使用的摄像头.一般的笔记本电脑都有内置摄像头.所以参数就是 0.你可以通过设置成 1 或者其他的来选择别的摄像头.之后,你就可以一帧一帧的捕获视频了.但是最后,别忘了停止捕获视频.使用 ls /dev/video*命令可以查看摄像头设备 2,cap.read() 返回一个布尔值(True/False).如果帧读取的是正确的,就是 True.所以最后你可以通过检查

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

    接触图像领域的应该对于opencv都不会感到陌生,这个应该算是功能十分强劲的一个算法库了,当然了,使用起来也是很方便的,之前使用Windows7的时候出现多该库难以安装成功的情况,现在这个问题就不存在了,需要安装包的话可以去我的资源中下载使用,使用pip安装方式十分地便捷. 今天主要是基于opencv模块来调用笔记本的内置摄像头,然后从视频流中获取到人脸的图像数据用于之后的人脸识别项目,也就是为了构建可用的数据集.整个实现过程并不复杂,具体如下: #!usr/bin/env python #en

  • Python+OpenCV采集本地摄像头的视频

    本文实现了用Python和OpenCV配合,调用本地摄像头采集视频,基本上函数的话看opencv的官方文档就Ok了(The OpenCV Reference Manual  Release 2.4.7.0) 上代码: import cv2 import cv2.cv def getCam(): window_name='show image' cv2.namedWindow(window_name,cv2.WINDOW_NORMAL) video_cap_obj=cv2.VideoCapture

  • python+opencv实现摄像头调用的方法

    最近入了一块树莓派,想让其实现摄像头的调用,因此写下此博客备忘 一.树莓派网络的配置 首先,对树莓派进行网络配置,否则就无法进行软件的安装 我们知道,ifconfig命令可以修改ip地址.子网掩码等信息,但是当设备重启之后必须重新设置 因此,我们使用如下方法进行网络配置 修改/etc/network/interfaces 其中,红色框选中的为需要修改的部分 auto eth0 //设为开机启动eth0 iface eth0 inet static //设为静态ip address 10.215.

  • python opencv捕获摄像头并显示内容的实现

    1.捕获摄像头和实时显示 import cv2 import numpy as np import pickle import matplotlib.pyplot as plt cap = cv2.VideoCapture(0) while True: ret,frame = cap.read() # Our operations on the frame come here gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # Display the

  • python+openCV利用摄像头实现人员活动检测

    本文实例为大家分享了python+openCV利用摄像头实现人员活动检测的具体代码,供大家参考,具体内容如下 1.前言 最近在做个机器人比赛,其中一项要求是让机器人实现对是否有人员活动的检测,所以就先拿PC端写一下,准备移植到机器人的树莓派. 2.工具 工具还是简单的python+视觉模块openCV,代码量也比较少.很简单就可以实现 3.人员检测的原理   从图书馆借了一本<特征提取与图像处理(第二版)>,是Mark S.Nixon和Alberto S.Aguado写的,其中讲了跟多关于检测

  • python使用opencv驱动摄像头的方法

    如下所示: #coding:utf-8 import cv2 import sys from PIL import Image def CatchUsbVideo(window_name, camera_idx): cv2.namedWindow(window_name) # 捕捉摄像头 cap = cv2.VideoCapture(camera_idx) while cap.isOpened(): ok, frame = cap.read() # 读取一帧数据 if not ok: break

  • OpenCV-Python 摄像头实时检测人脸代码实例

    参考 OpenCV摄像头使用 代码 import cv2 cap = cv2.VideoCapture(4) # 使用第5个摄像头(我的电脑插了5个摄像头) face_cascade = cv2.CascadeClassifier(r'haarcascade_frontalface_default.xml') # 加载人脸特征库 while(True): ret, frame = cap.read() # 读取一帧的图像 gray = cv2.cvtColor(frame, cv2.COLOR_

随机推荐