opencv基础: 视频,摄像头读取与保存的常用方法

当然还可以从视频中抓取截图,所以现在聊一下常用的抓取视频截图的的方法。

VideoCapture 方法

python 复制代码
 cv2.VideoCapture();
 cv2.VideoCapture( device);
 cv2.VideoCapture(filename);

上面有三种构造方法,

  • 第一种是无法构造方法。

  • 第二种参数device是一个数字。

    一般笔记本如此写cv2.VideoCapture(0); 因为默认是0 ,如果有多个摄像头,就需要看设置的摄像头代表的数字了。

  • 第二种参数device是一个字符串。

    其代表是从视频文件种得到帧。

release 方法

释放资源的方法:

python 复制代码
cap = cv2.VideoCapture();
cap.release()

read 方法

read方法就是读取视频的帧的方法。

python 复制代码
cap = cv2.VideoCapture();
cap.read()
  • read() 方法返回的有两个值
    • 第一个值:为状态值,读到帧就是true
    • 第二个值:返回的视频帧,通俗的说就是图片

来一个例子:

python 复制代码
import  cv2
Cap = cv2.VideoCapture("1.mp4");
flag,phto= Cap.read();

cv2.namedWindow("Wind", cv2.WINDOW_NORMAL)
# cv2.resizeWindow("Wind", 1920, 1080)
cv2.imshow("Wind",phto)

key=cv2.waitKey(0)

if key=="q":
    cv2.destroyWindow()
Cap.release()

但是如果观察效果的话,会发现这是窗口只有镜头内容。

所以需要用一个while循环

python 复制代码
import  cv2
Cap = cv2.VideoCapture("1.mp4");
cv2.namedWindow("Wind", cv2.WINDOW_NORMAL)
# cv2.resizeWindow("Wind", 1920, 1080)
while True:
    flag, phto = Cap.read();
    if flag:
        cv2.imshow("Wind",phto)
        key=cv2.waitKey(1)
        if(key & 0xFF == ord('q')):
             break
    else:
        break
Cap.release()
#释放VideoWriter
Cap.release()
cv2.destroyAllWindows()

isOpened方法

这个方法是判断摄像头和文件是发可以正常打开,返回True 或 False:

python 复制代码
# Cap = cv2.VideoCapture(1);
Cap = cv2.VideoCapture("1.mp4");
# 可以使用判断是否摄像头打开 作为标识符值
Cap.isOpened() 

可以读取文件的方法修改为:

python 复制代码
import  cv2
# 如果是通过摄像头的话
# Cap = cv2.VideoCapture(1);
Cap = cv2.VideoCapture("1.mp4");
cv2.namedWindow("Wind", cv2.WINDOW_NORMAL)
# cv2.resizeWindow("Wind", 1920, 1080)
# Cap.isOpened():  可以使用判断是否摄像头打开  以及文件是否可以正常打开
while Cap.isOpened():
    flag, phto = Cap.read();
    if flag:
        cv2.imshow("Wind",phto)
        # cv2.resizeWindow("Wind", 1920, 1080)
        key=cv2.waitKey(1)
        if(key & 0xFF == ord('q')):
             break
    else:
        break
Cap.release()
#释放VideoWriter
Cap.release()
cv2.destroyAllWindows()

补充

这里补充一点 如果再循环外:

python 复制代码
cv2.resizeWindow("Wind", 1920, 1080)

只会在循环种呈现一次,如果真的需要,那就行说在循环体内再写一遍。

VideoWriter方法

有时候,打开摄像头等,需要将内容保存到本地,所以就需要这个方法:

如下:

python 复制代码
cv2.VideoWriter(filename, fourcc, fps, frameSize, isColor)
  1. filename(必选):要写入的视频文件的名称。

  2. fourcc(必选):用于指定视频编解码器的4个字符代码。例如,'MJPG'表示Motion JPEG编码。

    python 复制代码
    fourcc = cv2.VideoWriter_fourcc(*'MJPG')
  3. fps(必选):视频的帧率,以每秒帧数(FPS)为单位。

  4. frameSize(必选):视频帧的大小,以像素为单位。

  5. isColor(可选):一个布尔值,指示是否使用彩色。如果为True,则使用彩色,否则为灰度。

python 复制代码
filename = 'tang1.avi'
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
fps = 30.0
frameSize = (640, 480)
isColor = True

# 创建VideoWriter对象
out = cv2.VideoWriter(filename, fourcc, fps, frameSize, isColor)

不过这个等于创建了个对象,还需要进入写入,所以需要在用如下方法:

python 复制代码
#frame = cv2.imread('frame.jpg') 或者是视频  flag, frame = Cap.read();
out.write(frame)

结合如下写:

python 复制代码
import  cv2
# 如果是通过摄像头的话
# Cap = cv2.VideoCapture(1);
Cap = cv2.VideoCapture("1.mp4");
cv2.namedWindow("Wind", cv2.WINDOW_NORMAL)
filename = 'tang1.avi'
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
fps = 30.0
frameSize = (640, 480)
isColor = True

# 创建VideoWriter对象
out = cv2.VideoWriter(filename, fourcc, fps, frameSize, isColor)
# cv2.resizeWindow("Wind", 1920, 1080)
# Cap.isOpened():  可以使用判断是否摄像头打开  以及文件是否可以正常打开
while Cap.isOpened():
    flag, frame = Cap.read();
    if flag:
        cv2.imshow("Wind",phto)
        out.write(frame)
        # cv2.resizeWindow("Wind", 1920, 1080)
        key=cv2.waitKey(1)
        if(key & 0xFF == ord('q')):
             break
    else:
        break
Cap.release()
#释放VideoWriter
Cap.release()
cv2.destroyAllWindows()
相关推荐
LCG元19 分钟前
自动驾驶感知模块的多模态数据融合:时序同步与空间对齐的框架解析
人工智能·机器学习·自动驾驶
why技术23 分钟前
Stack Overflow,轰然倒下!
前端·人工智能·后端
彭祥.41 分钟前
Jetson边缘计算主板:Ubuntu 环境配置 CUDA 与 cudNN 推理环境 + OpenCV 与 C++ 进行目标分类
c++·opencv·分类
超龄超能程序猿1 小时前
(三)PS识别:基于噪声分析PS识别的技术实现
图像处理·人工智能·计算机视觉
要努力啊啊啊1 小时前
YOLOv3-SPP Auto-Anchor 聚类调试指南!
人工智能·深度学习·yolo·目标检测·目标跟踪·数据挖掘
好开心啊没烦恼1 小时前
Python 数据分析:numpy,说人话,说说数组维度。听故事学知识点怎么这么容易?
开发语言·人工智能·python·数据挖掘·数据分析·numpy
生态遥感监测笔记1 小时前
GEE利用已有土地利用数据选取样本点并进行分类
人工智能·算法·机器学习·分类·数据挖掘
天天扭码2 小时前
从图片到语音:我是如何用两大模型API打造沉浸式英语学习工具的
前端·人工智能·github
Tony沈哲2 小时前
macOS 上为 Compose Desktop 构建跨架构图像处理 dylib:OpenCV + libraw + libheif 实践指南
opencv·算法
张彦峰ZYF2 小时前
从检索到生成:RAG 如何重构大模型的知识边界?
人工智能·ai·aigc