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 相关文章推荐
用Python实现换行符转换的脚本的教程
Apr 16 Python
python模块之time模块(实例讲解)
Sep 13 Python
Django中反向生成models.py的实例讲解
May 30 Python
Python实现的旋转数组功能算法示例
Feb 23 Python
Python for循环与range函数的使用详解
Mar 23 Python
python批量修改ssh密码的实现
Aug 08 Python
python打印n位数“水仙花数”(实例代码)
Dec 25 Python
Python正则表达式学习小例子
Mar 03 Python
python语音识别指南终极版(有这一篇足矣)
Sep 09 Python
python 实现"神经衰弱"翻牌游戏
Nov 09 Python
Sublime Text3最新激活注册码分享适用2020最新版 亲测可用
Nov 12 Python
python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析
Apr 14 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+AJAX实现无刷新注册(带用户名实时检测)
2007/01/02 PHP
PHP 图片水印类代码
2012/08/27 PHP
php实现图片按比例截取的方法
2017/02/06 PHP
Ext面向对象开发实践(续)
2008/11/18 Javascript
js表格分页实现代码
2009/09/18 Javascript
详解JavaScript中jQuery和Ajax以及JSONP的联合使用
2015/08/13 Javascript
深入理解javascript作用域第二篇之词法作用域和动态作用域
2016/07/24 Javascript
vue router使用query和params传参的使用和区别
2017/11/13 Javascript
vue使用xe-utils函数库的具体方法
2018/03/06 Javascript
详解nuxt sass全局变量(公共scss解决方案)
2018/06/27 Javascript
vue基于element-ui的三级CheckBox复选框功能的实现代码
2018/10/15 Javascript
解决JavaScript中0.1+0.2不等于0.3问题
2018/10/23 Javascript
JavaScript模板引擎应用场景及实现原理详解
2018/12/14 Javascript
在Vue项目中取消ESLint代码检测的步骤讲解
2019/01/27 Javascript
js通过canvas生成图片缩略图
2020/10/02 Javascript
JavaScript 实现拖拽效果组件功能(兼容移动端)
2020/11/11 Javascript
JavaScript实现弹出窗口效果
2020/12/09 Javascript
Python numpy实现二维数组和一维数组拼接的方法
2018/06/05 Python
简单了解python字符串前面加r,u的含义
2019/12/26 Python
python实现单张图像拼接与批量图片拼接
2020/03/23 Python
在django中查询获取数据,get, filter,all(),values()操作
2020/08/09 Python
python 窃取摄像头照片的实现示例
2021/01/08 Python
解决python的空格和tab混淆而报错的问题
2021/02/26 Python
CSS+jQuery+PHP+MySQL实现的在线答题功能
2015/04/25 HTML / CSS
HTML5 图片悬停放大的实现代码示例
2019/12/04 HTML / CSS
HTML5超文本标记语言的实现方法
2020/09/24 HTML / CSS
印尼值得信赖的在线交易网站:Bukalapak
2019/03/11 全球购物
销售员个人求职的自我评价
2014/02/10 职场文书
物理教育专业求职信
2014/06/25 职场文书
村创先争优活动总结
2014/08/28 职场文书
2014小学二年级班主任工作总结
2014/12/05 职场文书
小学三年级班主任工作经验交流材料
2015/11/02 职场文书
2019年警察入党转正申请书最新范文
2019/09/03 职场文书
Python打包exe时各种异常处理方案总结
2021/05/18 Python
Python基于百度API识别并提取图片中文字
2021/06/27 Python
如何使用注解方式实现 Redis 分布式锁
2022/07/23 Redis