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()
相关推荐
zhuiyisuifeng27 分钟前
2026前瞻:GPTimage2镜像官网或将颠覆视觉创作
人工智能·gpt
徐健峰30 分钟前
GPT-image-2 热门玩法实战(一):AI 看手相 — 一张手掌照片生成专业手相分析图
人工智能·gpt
weixin_3709763531 分钟前
AI的终极赛跑:进入AGI,还是泡沫破灭?
大数据·人工智能·agi
Slow菜鸟34 分钟前
AI学习篇(五) | awesome-design-md 使用说明
人工智能·学习
冬奇Lab1 小时前
RAG 系列(五):Embedding 模型——语义理解的核心
人工智能·llm·aigc
深小乐1 小时前
AI 周刊【2026.04.27-05.03】:Anthropic 9000亿美元估值、英伟达死磕智能体、中央重磅定调AI
人工智能
码点滴1 小时前
什么时候用 DeepSeek V4,而不是 GPT-5/Claude/Gemini?
人工智能·gpt·架构·大模型·deepseek
狐狐生风1 小时前
LangChain 向量存储:Chroma、FAISS
人工智能·python·学习·langchain·faiss·agentai
波动几何1 小时前
CDA架构代码工坊技能cda-code-lab
人工智能
舟遥遥娓飘飘2 小时前
DeepSeek V4技术变革对社会结构与职业体系的重构
人工智能