python通过opencv调用摄像头操作实例分析


Posted in Python onJune 07, 2021

实例源码:

#pip3 install opencv-python
import cv2
from datetime import datetime
 
FILENAME = 'myvideo.avi'
WIDTH = 1280
HEIGHT = 720
FPS = 24.0
 
# 必须指定CAP_DSHOW(Direct Show)参数初始化摄像头,否则无法使用更高分辨率
cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)
# 设置摄像头设备分辨率
cap.set(cv2.CAP_PROP_FRAME_WIDTH, WIDTH)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, HEIGHT)
# 设置摄像头设备帧率,如不指定,默认600
cap.set(cv2.CAP_PROP_FPS, 24)
# 建议使用XVID编码,图像质量和文件大小比较都兼顾的方案
fourcc = cv2.VideoWriter_fourcc(*'XVID')
 
out = cv2.VideoWriter(FILENAME, fourcc, FPS, (WIDTH, HEIGHT))
 
start_time = datetime.now()
 
while True:
    ret, frame = cap.read()
    if ret:
        out.write(frame)
        # 显示预览窗口
        cv2.imshow('Preview_Window', frame)
        # 录制5秒后停止
        if (datetime.now()-start_time).seconds == 5:
            cap.release()
            break
        # 监测到ESC按键也停止
        if cv2.waitKey(3) & 0xff == 27:
            cap.release()
            break
 
out.release()
cv2.destroyAllWindows()

打开摄像头后链接成功的操作:

# 1. 打开摄像头
import cv2
import numpy as np
  
def video_demo():
  capture = cv2.VideoCapture(0)#0为电脑内置摄像头
  while(True):
    ret, frame = capture.read()#摄像头读取,ret为是否成功打开摄像头,true,false。 frame为视频的每一帧图像
    frame = cv2.flip(frame, 1)#摄像头是和人对立的,将图像左右调换回来正常显示。
    cv2.imshow("video", frame)
    c = cv2.waitKey(50)
    if c == 27:
      break
video_demo()
cv2.destroyAllWindows()
 
 
#2. 打开摄像头并截图
import cv2
cap = cv2.VideoCapture(0, cv2.CAP_DSHOW) # 打开摄像头
  
while (1):
  # get a frame
  ret, frame = cap.read()
  frame = cv2.flip(frame, 1) # 摄像头是和人对立的,将图像左右调换回来正常显示
  # show a frame
  cv2.imshow("capture", frame) # 生成摄像头窗口
  
  if cv2.waitKey(1) & 0xFF == ord('q'): # 如果按下q 就截图保存并退出
    cv2.imwrite("test.png", frame) # 保存路径
    break
  
cap.release()
cv2.destroyAllWindows()
 
 
#3. 打开摄像头并定时截图
def video_demo():
  print('开始')
  cap = cv2.VideoCapture(0, cv2.CAP_DSHOW) # 电脑自身摄像头
  i = 0#定时装置初始值
  photoname = 1#文件名序号初始值
  
  while True:
    i = i + 1
    reg, frame = cap.read()
    frame = cv2.flip(frame, 1) # 图片左右调换
    cv2.imshow('window', frame)
  
    if i == 50: # 定时装置,定时截屏,可以修改。
  
      filename = str(photoname) + '.png' # filename为图像名字,将photoname作为编号命名保存的截图
      cv2.imwrite('C:/Users/Administrator/Desktop/m' + '\\' + filename, frame) # 截图 前面为放在桌面的路径 frame为此时的图像
      print(filename + '保存成功') # 打印保存成功
      i = 0 # 清零
  
      photoname = photoname + 1
      if photoname >= 20: # 最多截图20张 然后退出(如果调用photoname = 1 不用break为不断覆盖图片)
        # photoname = 1
        break
    if cv2.waitKey(1) & 0xff == ord('q'):
      break
  # 释放资源
  cap.release()
  
video_demo()
cv2.destroyAllWindows()

实例扩展:

使用OpenCV调用摄像头检测人脸并连续截图100张

#-*- coding: utf-8 -*-
# import 进openCV的库
import cv2

###调用电脑摄像头检测人脸并截图

def CatchPICFromVideo(window_name, camera_idx, catch_pic_num, path_name):
 cv2.namedWindow(window_name)

 #视频来源,可以来自一段已存好的视频,也可以直接来自USB摄像头
 cap = cv2.VideoCapture(camera_idx)

 #告诉OpenCV使用人脸识别分类器
 classfier = cv2.CascadeClassifier("haarcascade_frontalface_alt.xml")

 #识别出人脸后要画的边框的颜色,RGB格式, color是一个不可增删的数组
 color = (0, 255, 0)

 num = 0
 while cap.isOpened():
 ok, frame = cap.read() #读取一帧数据
 if not ok:
  break

 grey = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) #将当前桢图像转换成灰度图像

 #人脸检测,1.2和2分别为图片缩放比例和需要检测的有效点数
 faceRects = classfier.detectMultiScale(grey, scaleFactor = 1.2, minNeighbors = 3, minSize = (32, 32))
 if len(faceRects) > 0:  #大于0则检测到人脸
  for faceRect in faceRects: #单独框出每一张人脸
  x, y, w, h = faceRect

  #将当前帧保存为图片
  img_name = "%s/%d.jpg" % (path_name, num)
  #print(img_name)
  image = frame[y - 10: y + h + 10, x - 10: x + w + 10]
  cv2.imwrite(img_name, image,[int(cv2.IMWRITE_PNG_COMPRESSION), 9])

  num += 1
  if num > (catch_pic_num): #如果超过指定最大保存数量退出循环
   break

  #画出矩形框
  cv2.rectangle(frame, (x - 10, y - 10), (x + w + 10, y + h + 10), color, 2)

  #显示当前捕捉到了多少人脸图片了,这样站在那里被拍摄时心里有个数,不用两眼一抹黑傻等着
  font = cv2.FONT_HERSHEY_SIMPLEX
  cv2.putText(frame,'num:%d/100' % (num),(x + 30, y + 30), font, 1, (255,0,255),4)

  #超过指定最大保存数量结束程序
 if num > (catch_pic_num): break

 #显示图像
 cv2.imshow(window_name, frame)
 c = cv2.waitKey(10)
 if c & 0xFF == ord('q'):
  break

  #释放摄像头并销毁所有窗口
 cap.release()
 cv2.destroyAllWindows()

if __name__ == '__main__':
 # 连续截100张图像,存进image文件夹中
 CatchPICFromVideo("get face", 0, 99, "/image")

到此这篇关于python通过opencv调用摄像头操作实例分析的文章就介绍到这了,更多相关python使用opencv调用摄像头操作内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Win7上搭建Cocos2d-x 3.1.1开发环境
Jul 03 Python
python安装以及IDE的配置教程
Apr 29 Python
Python实现批量将word转html并将html内容发布至网站的方法
Jul 14 Python
Python连接DB2数据库
Aug 27 Python
python编程之requests在网络请求中添加cookies参数方法详解
Oct 25 Python
python3解析库lxml的安装与基本使用
Jun 27 Python
python3编写ThinkPHP命令执行Getshell的方法
Feb 26 Python
python tkinter组件摆放方式详解
Sep 16 Python
解决Django no such table: django_session的问题
Apr 07 Python
基于Python的一个自动录入表格的小程序
Aug 05 Python
python 利用PyAutoGUI快速构建自动化操作脚本
May 31 Python
Python虚拟环境virtualenv是如何使用的
Jun 20 Python
Python爬虫之用Xpath获取关键标签实现自动评论盖楼抽奖(二)
Jun 07 #Python
还在手动盖楼抽奖?教你用Python实现自动评论盖楼抽奖(一)
Jun 07 #Python
Pytorch中Softmax和LogSoftmax的使用详解
Jun 05 #Python
Pytorch中Softmax与LogSigmoid的对比分析
Jun 05 #Python
Pytorch反向传播中的细节-计算梯度时的默认累加操作
pytorch 梯度NAN异常值的解决方案
Jun 05 #Python
pytorch 权重weight 与 梯度grad 可视化操作
You might like
php表单敏感字符过滤类
2014/12/08 PHP
php5.4以下版本json不支持不转义内容中文的解决方法
2015/01/13 PHP
PHP滚动日志的代码实现
2015/06/10 PHP
用javascript获取地址栏参数
2006/12/22 Javascript
javascript vvorld 在线加密破解方法
2008/11/13 Javascript
一个简单的动态加载js和css的jquery代码
2014/09/01 Javascript
node.js中Socket.IO的进阶使用技巧
2014/11/04 Javascript
JavaScript获取页面中第一个锚定文本的方法
2015/04/03 Javascript
jQuery弹层插件jquery.fancybox.js用法实例
2016/01/22 Javascript
jQuery控制div实现随滚动条滚动效果
2016/06/07 Javascript
js基于cookie记录来宾姓名的方法
2016/07/19 Javascript
JS实现随机颜色的3种方法与颜色格式的转化
2017/01/05 Javascript
微信小程序实战之运维小项目
2017/01/17 Javascript
AngularJS执行流程详解
2017/02/17 Javascript
Node.js 的模块知识汇总
2017/08/16 Javascript
Vue学习笔记之表单输入控件绑定
2017/09/05 Javascript
使用vue完成微信公众号网页小记(推荐)
2019/04/28 Javascript
Element Dialog对话框的使用示例
2020/07/26 Javascript
[03:38]TI4西雅图DOTA2前线报道 71专访
2014/07/08 DOTA
利用TensorFlow训练简单的二分类神经网络模型的方法
2018/03/05 Python
python实现自动发送报警监控邮件
2018/06/21 Python
Python一个简单的通信程序(客户端 服务器)
2019/03/06 Python
解决pyCharm中 module 调用失败的问题
2020/02/12 Python
Python中os模块功能与用法详解
2020/02/26 Python
python 截取XML中bndbox的坐标中的图像,另存为jpg的实例
2020/03/10 Python
Django models文件模型变更错误解决
2020/05/11 Python
印度化妆品购物网站:Nykaa
2018/07/22 全球购物
纽约海:Sea New York
2018/11/04 全球购物
党的群众路线教育实践活动心得体会900字
2014/03/07 职场文书
“九一八事变纪念日”国旗下讲话稿
2014/09/14 职场文书
自荐信格式范文
2015/03/04 职场文书
新年祝酒词大全
2015/08/11 职场文书
《静夜思》教学反思
2016/02/17 职场文书
读《解忧杂货店》有感:请相信一切都是最好的安排
2019/11/07 职场文书
浅谈Python项目的服务器部署
2021/04/25 Python
k8s部署redis cluster集群的实现
2021/06/24 Redis