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函数式编程指南(二):从函数开始
Jun 24 Python
利用python实现xml与数据库读取转换的方法
Jun 17 Python
python+opencv轮廓检测代码解析
Jan 05 Python
快速了解Python开发中的cookie及简单代码示例
Jan 17 Python
对Python的多进程锁的使用方法详解
Feb 18 Python
Python自动生成代码 使用tkinter图形化操作并生成代码框架
Sep 18 Python
python对Excel按条件进行内容补充(推荐)
Nov 24 Python
如何理解Python中的变量
Jun 01 Python
pyMySQL SQL语句传参问题,单个参数或多个参数说明
Jun 06 Python
如何使用python记录室友的抖音在线时间
Jun 29 Python
Python如何创建装饰器时保留函数元信息
Aug 07 Python
Python爬虫之爬取二手房信息
Apr 27 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
PHP5 的对象赋值机制介绍
2011/08/02 PHP
PHP实现支付宝即时到账功能
2016/12/21 PHP
php正则修正符用法实例详解
2016/12/29 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
2020/04/04 PHP
在JavaScript中使用inline函数的问题
2007/03/08 Javascript
js 实现在离开页面时提醒未保存的信息(减少用户重复操作)
2013/01/16 Javascript
javascript中interval与setTimeOut的区别示例介绍
2014/03/14 Javascript
基于javascript的JSON格式页面展示美化方法
2014/07/02 Javascript
输入框过滤非数字的js代码
2014/09/18 Javascript
jQuery实现流动虚线框的方法
2015/01/29 Javascript
Jquery中offset()和position()的区别分析
2015/02/05 Javascript
JS获取图片高度宽度的方法分享
2015/04/17 Javascript
怎么通过onclick事件获取js函数返回值(代码少)
2015/07/28 Javascript
一篇文章掌握RequireJS常用知识
2016/01/26 Javascript
AngularJS实现表单验证功能
2017/01/09 Javascript
Vuex之理解Store的用法
2017/04/19 Javascript
学习使用Bootstrap页面排版样式
2017/05/11 Javascript
JS传播事件、取消事件默认行为、阻止事件传播详解
2017/08/14 Javascript
Vue实现todolist删除功能
2018/06/26 Javascript
Vue+iview+webpack ie浏览器兼容简单处理
2019/09/20 Javascript
layui table 表格上添加日期控件的两种方法
2019/09/28 Javascript
python实现指定字符串补全空格、前面填充0的方法
2018/11/16 Python
Python给定一个句子倒序输出单词以及字母的方法
2018/12/20 Python
Python单元和文档测试实例详解
2019/04/11 Python
sklearn和keras的数据切分与交叉验证的实例详解
2020/06/19 Python
Wedgwood美国官网:英国骨瓷,精美礼品及家居装饰
2018/02/17 全球购物
法国女性内衣购物网站:Glamuse
2019/05/13 全球购物
婚纱摄影师求职信
2014/03/07 职场文书
公证书标准格式
2014/04/10 职场文书
《彭德怀和他的大黑骡子》教学反思
2014/04/12 职场文书
村党支部公开承诺书
2014/05/29 职场文书
国庆65周年演讲稿:回首往昔,展望未来
2014/09/21 职场文书
七一建党节慰问信
2015/02/14 职场文书
慈善献爱心倡议书
2015/04/27 职场文书
Flask response响应的具体使用
2021/07/15 Python
Python实现抖音热搜定时爬取功能
2022/03/16 Python