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 16 Python
python中list循环语句用法实例
Nov 10 Python
Python的Flask框架中配置多个子域名的方法讲解
Jun 07 Python
Python数据分析之双色球统计两个红和蓝球哪组合比例高的方法
Feb 03 Python
DJANGO-URL反向解析REVERSE实例讲解
Oct 25 Python
PyCharm设置Ipython交互环境和宏快捷键进行数据分析图文详解
Apr 23 Python
详解tensorflow2.x版本无法调用gpu的一种解决方法
May 25 Python
Python分析最近大火的网剧《隐秘的角落》
Jul 02 Python
Python 多进程原理及实现
Dec 21 Python
plt.figure()参数使用详解及运行演示
Jan 08 Python
python 实现图片裁剪小工具
Feb 02 Python
Python装饰器详细介绍
Mar 25 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
通过javascript获取iframe里的值示例代码
2013/06/24 Javascript
javascript在myeclipse中报错的解决方法
2013/10/29 Javascript
javascript实现json页面分页实例代码
2014/02/20 Javascript
jquery实现pager控件示例
2014/04/09 Javascript
node.js中的fs.write方法使用说明
2014/12/15 Javascript
移动端H5开发 Turn.js实现很棒的翻书效果
2016/06/20 Javascript
关于Vue.js 2.0的Vuex 2.0 你需要更新的知识库
2016/11/30 Javascript
JavaScript表单验证的两种实现方法
2017/02/11 Javascript
微信小程序实现倒计时60s获取验证码
2020/04/17 Javascript
JS基于对象的特性实现去除数组中重复项功能详解
2017/11/17 Javascript
利用adb shell和node.js实现抖音自动抢红包功能(推荐)
2018/02/22 Javascript
详解JavaScript中操作符和表达式
2018/09/12 Javascript
layui 上传插件 带预览 非自动上传功能的实例(非常实用)
2019/09/23 Javascript
[03:19]2016国际邀请赛中国区预选赛第四日TOP10镜头集锦
2016/07/01 DOTA
python执行外部程序的常用方法小结
2015/03/21 Python
[原创]pip和pygal的安装实例教程
2017/12/07 Python
使用Python将Mysql的查询数据导出到文件的方法
2019/02/25 Python
关于Python中定制类的比较运算实例
2019/12/19 Python
Python selenium自动化测试模型图解
2020/04/15 Python
pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]
2020/04/24 Python
Python logging模块原理解析及应用
2020/08/13 Python
美国大码时尚女装购物网站:ELOQUII
2017/12/28 全球购物
Blue Nile蓝色尼罗河香港官网:世界最大在线钻石珠宝销售商
2020/05/07 全球购物
linux面试题参考答案(8)
2016/04/19 面试题
广州足迹信息技术有限公司Java软件工程师试题
2014/02/15 面试题
文秘专业大学生求职信
2013/11/10 职场文书
财务人员求职自荐书范文
2014/02/10 职场文书
岗位职责风险防控
2014/02/18 职场文书
创业女性典型材料
2014/05/02 职场文书
关于晚自习早退的检讨书
2014/09/13 职场文书
北京离婚协议书范文2014
2014/09/29 职场文书
毕业实习证明(4篇)
2014/10/28 职场文书
天坛导游词
2015/02/02 职场文书
幼儿园教师工作总结2015
2015/04/02 职场文书
2015年房地产个人工作总结
2015/05/26 职场文书
2016年禁毒宣传活动总结
2016/04/05 职场文书