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 相关文章推荐
Python3实现的腾讯微博自动发帖小工具
Nov 11 Python
python刷投票的脚本实现代码
Nov 08 Python
浅谈Python的Django框架中的缓存控制
Jul 24 Python
在Python程序中操作MySQL的基本方法
Jul 29 Python
python编写简单爬虫资料汇总
Mar 22 Python
在 Python 应用中使用 MongoDB的方法
Jan 05 Python
Python heapq使用详解及实例代码
Jan 25 Python
Python CVXOPT模块安装及使用解析
Aug 01 Python
Python OpenCV实现鼠标画框效果
Aug 19 Python
利用anaconda作为python的依赖库管理方法
Aug 13 Python
Python基础教程之输入输出和运算符
Jul 26 Python
详解python polyscope库的安装和例程
Nov 13 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
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
非常不错的一个javascript 类
2006/11/07 Javascript
Ajax一统天下之Dojo整合篇
2007/03/24 Javascript
jquery 单引号和双引号的区别及使用注意
2013/07/31 Javascript
js获取下拉列表的值和元素个数示例
2014/05/07 Javascript
jQuery模拟物体自由落体运动(附演示与demo源码下载)
2016/01/21 Javascript
js实现无缝滚动图
2017/02/22 Javascript
jquery实现tab键进行选择后enter键触发click行为
2017/03/29 jQuery
jQuery插件select2利用ajax高效查询大数据列表(可搜索、可分页)
2017/05/19 jQuery
解决JQuery全选/反选第二次失效的问题
2017/10/11 jQuery
详解koa2学习中使用 async 、await、promise解决异步的问题
2018/11/13 Javascript
vue单页应用的内存泄露定位和修复问题小结
2019/08/02 Javascript
vue实现浏览器全屏展示功能
2019/11/27 Javascript
[05:22]DOTA2 2015国际邀请赛中国区预选赛首日TOP10
2015/05/26 DOTA
python 查找文件夹下所有文件 实现代码
2009/07/01 Python
Python实现的简单hangman游戏实例
2015/06/28 Python
Python实现string字符串连接的方法总结【8种方式】
2018/07/06 Python
Python生成rsa密钥对操作示例
2019/04/26 Python
Python实现打砖块小游戏代码实例
2019/05/18 Python
Python实现搜索算法的实例代码
2020/01/02 Python
Python基于smtplib模块发送邮件代码实例
2020/05/29 Python
Javascript 高级手势使用介绍
2013/04/21 HTML / CSS
AC Lens:购买隐形眼镜
2017/02/26 全球购物
FLIR美国官网:热成像, 夜视和红外摄像系统
2018/07/13 全球购物
DNA基因检测和分析:23andMe
2019/05/01 全球购物
药学专业学生的自我评价分享
2014/02/06 职场文书
学雷锋先进个人事迹
2014/05/26 职场文书
商铺消防安全责任书
2014/07/29 职场文书
城市规划应届生推荐信
2014/09/08 职场文书
九寨沟导游词
2015/02/02 职场文书
大一学生个人总结
2015/02/15 职场文书
审查起诉阶段律师意见书
2015/05/19 职场文书
postman中form-data、x-www-form-urlencoded、raw、binary的区别介绍
2022/01/18 HTML / CSS
DSP接收机前端设想
2022/04/05 无线电
Win11控制面板快捷键是什么?Win11打开控制面板的方法汇总
2022/07/07 数码科技