通过python调用opencv,实现调用笔记本上的镜头进行视频采集

首先声明:这段代码不是我写的,是我室友发给我的,我自己找不到原来写这段代码的博主,所以就贴不了原帖的链接,麻烦哪位大佬有原帖的链接,请留言告诉我,我好补上,毕竟是人家的心血,不应该盗用。我写这篇博客是想记录自己对这段代码的注释,方便日后复习。请大家尊重原作

在调用之前首先要在pycharm中导入opencv库和numpy库,具体导库方式麻烦百度,导入之后就可以运行以下代码了

import numpy as np
#NumPy 是一个运行速度非常快的数学库,主要用于数组计算
#s视频是由图像按照帧数播放的,帧数大于某一数值时,人眼就无法区分图片,而认为是连续的动作
#对于计算机而言图像就是一个矩阵,在OpenCV for Python中,图像就是NumPy中的数组
#因此在使用opencv之前需要导入numpy库
import cv2
#opencv是使用大部分c和少部分c++写的一个用于计算机视觉库
#计算机视觉即通过摄像头对周围的食物进行采集,并达到识别的效果
#opencv为python提供了很多可以调用的接口,但是python在调用该库时必须写成cv2,而不是opencv
#opencv的C++命名空间名称,使用它来表示调用的是C++开发的opencv的接口
cap = cv2.VideoCapture(0)
#VideoCapture()中参数是0,表示打开笔记本的内置摄像头
#参数是视频文件路径则打开视频,如cap = cv2.VideoCapture(“../test.avi”)

fourcc = cv2.VideoWriter_fourcc(*'XVID')
#定义视频编码方式为“xvid”
#fourcc意为四字符代码(Four-Character Codes),顾名思义,该编码由四个字符组成,下面是VideoWriter_fourcc对象一些常用的参数,注意:字符顺序不能弄混
#cv2.VideoWriter_fourcc('I', '4', '2', '0'),该参数是YUV编码类型,文件名后缀为.avi
#cv2.VideoWriter_fourcc('P', 'I', 'M', 'I'),该参数是MPEG-1编码类型,文件名后缀为.avi
#cv2.VideoWriter_fourcc('X', 'V', 'I', 'D'),该参数是MPEG-4编码类型,文件名后缀为.avi
#cv2.VideoWriter_fourcc('T', 'H', 'E', 'O'),该参数是Ogg Vorbis,文件名后缀为.ogv
#cv2.VideoWriter_fourcc('F', 'L', 'V', '1'),该参数是Flash视频,文件名后缀为.flv
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))
#分别指出:保存文件名为“output.avi”、编码器为“fourcc,即上述的xvid编码方式”、帧率“20.0”、视频分辨率(640宽,480高):宽640个像素点,高480个像素点
while(cap.isOpened()):
#cap.isopened即调用摄像头成功
    ret, frame = cap.read()
    #cap.read()按帧读取视频
    # ret,frame是获cap.read()方法的两个返回值
    # 其中ret是布尔值,表示当前是否读取到一帧,读到了就返回True,没读到就返回false
    # frame就是每一帧的图像,是个三维矩阵(R,G,B)。
    if ret==True:
        #读到了一帧图像
        frame = cv2.flip(frame,1)
        #将摄像头取到的帧画面水平翻转
        out.write(frame)
        #向本地磁盘存储该翻转之后的帧画面

        cv2.imshow('frame',frame)
        #cv2.imshow()创建一个窗口显示图片,这个窗口会自动适应图片的尺寸。
        #第一个参数表示窗口名字,可以创建多个窗口,但是每个窗口不能重名;
        #第二个参数表示读取的图片名字
        #out.write(frame)与cv2.imshow('frame',frame)两者的功能并不冲突
        #out是用来存储这一帧的,imshow是用来向用户实时展示这一帧的

        if cv2.waitKey(1) & 0xFF == ord('q'):
        #cv2.waitKey(1),waitKey()方法本身表示等待键盘输入,
        #参数是1,表示延时1ms切换到下一帧图像;
        #参数为0,如cv2.waitKey(0)只显示当前帧图像,相当于视频暂停,;
        #参数过大如cv2.waitKey(1000),会因为延时过久而卡顿感觉到卡顿,即1000ms后才采集下一帧
        #cv2.waitKey(1):返回与按下键值对应的32位整数
        #ord('q'):返回q对应的8位Unicode码对应的值,q对应的Unicode数值为113
        #0xFF,即位掩码,waitkey返回32位二进制数,ord返回8位二进制数
        #与该位掩码“相与”就是用于将waitkey返回的32位二进制数的左边连续24位清0
            break
    else:
        break

# Release everything if job is finished
cap.release()
#关闭摄像头
out.release()
#停止向存储的视频中写帧
cv2.destroyAllWindows()
#调用destroyAllWindows()关闭所有图像窗口,即关闭上面的imshow打开的窗口

采坑提示:在做frame视频框退出操作时,请不要在控制台中输入,直接在键盘上按即可,在控制台中按q无用!!

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值