opencv学习二(附):读视频的图像

上次我们学了图像的加载与保存,那么我们想通过摄像头按帧获取图像可以吗,当然!

打开摄像头,获取图像

代码如下:

import cv2 as cv  #导入cv模块
import numpy as np #np科学计数的包,通过numpy对数据进行处理


def video_demo():
    capture = cv.VideoCapture(0) #打开和电脑上连接的相机
    while(True):
        ret,frame = capture.read() #ret是返回值,frame是视频中的每一帧
        frame = cv.flip(frame, 1) 
        cv.imshow("video", frame) #将每一帧显示出来
        c = cv.waitKey(1) 
        if c == 27:
            break
    capture.release()

video_demo() #调用获取视频方法
cv.destroyAllWindows()  #释放所有的内存

运行截图:
在这里插入图片描述

方法讲解:

1、capture = cv2.VideoCapture(0)

VideoCapture()中参数是0,表示打开笔记本的内置摄像头,参数是视频文件路径则打开视频,如capture = cv2.VideoCapture("…/test.avi")

2、ret,frame = capture .read()

capture .read()按帧读取视频,ret,frame是获capture .read()方法的两个返回值。其中ret是布尔值,如果读取帧是正确的则返回True,如果文件读取到结尾,它的返回值就为False。frame就是每一帧的图像,是个三维矩阵。
3、cv::flip()
cv::flip()支持图像的翻转(上下翻转、左右翻转,以及同时均可)。

0: 沿y-轴翻转, 0: 沿x-轴翻转, <0: x、y轴同时翻转

在这里插入图片描述在这里插入图片描述在这里插入图片描述

4、cv.waitKey(1),waitKey()方法本身表示等待键盘输入,

参数是1,表示延时1ms切换到下一帧图像,对于视频而言;

参数为0,如cv.waitKey(0)只显示当前帧图像,相当于视频暂停,;

参数过大如cv.waitKey(1000),会因为延时过久而卡顿感觉到卡顿。

c得到的是键盘输入的ASCII码,esc键对应的ASCII码是27,即当按esc键是if条件句成立

5、调用release()释放摄像头,调用destroyAllWindows()关闭所有图像窗口。

猜你喜欢

转载自blog.csdn.net/weixin_44145452/article/details/112405354