Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python 从视频中提取图像

Python 从视频中提取图像

作者头像
为为为什么
发布于 2022-08-06 02:42:33
发布于 2022-08-06 02:42:33
1.4K00
代码可运行
举报
文章被收录于专栏:又见苍岚又见苍岚
运行总次数:0
代码可运行

视频由图像连续切换构成,本文记录python提取视频中图像的方法。

核心方法

  • 使用opencv 库 中的VideoCapture 方法:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import cv2
cap = cv2.VideoCapture(url)
cap.set(1, 1)  # 取它的第一帧
rval, frame = cap.read()  # rval 为是否成功的标记(True为正常), frame 为截取的图像

工具代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- coding: utf-8 -*-

import cv2
from PIL import Image
from io import BytesIO
import random
import time
import functools
import matplotlib.pyplot as plt


def tryTime(maxTry, timeout=random.random()):
    """
    重试
    :param maxTry:重试次数
    :param timeout:睡眠时间
    :return:
    """
    def wrap1(func):
        #functools.wraps 可以将原函数对象的指定属性复制给包装函数对象,
        @functools.wraps(func)
        def __decorator(*args,**kwargs):
            tryTime = 0
            while tryTime < maxTry:
                try:
                    return func(*args,**kwargs)
                except Exception:
                    pass
                    # print("TryTime_except==%s"%traceback.format_exc())
                    # logDebug("tryTime","TryTime_except==%s"%traceback.format_exc())
                tryTime += 1
                time.sleep(timeout)
        return __decorator
    return wrap1

@tryTime(2)
def get_video_cover(url):
    cap = cv2.VideoCapture(url)
    rate = cap.get(5)
    frame_number = cap.get(7)  # 视频文件的帧数
    if rate==0:
        duration=0
    else:
        duration = int(frame_number / rate)  # 单位秒
    cap.set(1, 1)  # 取它的第一帧
    rval, frame = cap.read()  # 如果rval为False表示这个视频有问题,为True则正常

    data = cv2.imencode(".jpg", frame)[1].tobytes()  # 将图片转为jpg格式的二进制流
    cap.release()
    height = frame.shape[0]  # 高度
    width = frame.shape[1]  # 宽度
    return rval, frame, duration, width, height


def get_image_size(data):
    im = Image.open(BytesIO(data))
    return im.size


if __name__ == '__main__':
    
    url = r'https://101.43.39.125/HexoFiles/win11-mt/20210909140933.mp4'
    rval, frame, duration, width, height = get_video_cover(url)
    print(rval)
    plt.imshow(frame)
    plt.show()

    pass

  • 代码可以直接运行,运行结果:

参考资料

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年9月15日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python提取视频第一帧图片
一.实现代码 # -*- coding: utf-8 -*- import cv2 from PIL import Image from io import BytesIO def tryTime(maxTry, timeout=random.random()): """ 重试 :param maxTry:重试次数 :param timeout:睡眠时间 :return: """ def wrap1(func): #functools
小小咸鱼YwY
2020/10/10
1.8K0
视频抽帧实践---openCV和decord视频编解码
剪辑平台中需要处理大量的视频,对视频内容的理解,离不开对视频的降维操作,一般流程是进行抽帧。抽帧操作是很多视频处理的第一步,也是基础数据的一步,大量算法模型离不开帧数据的训练,而高质量的视频,它的fps(每秒帧数)很大,这就造成了处理高清视频时,抽帧速度会成为整个视频处理的瓶颈,本文将对比目前主流的两个视频读取库, openCV和decord进行对比。
后厂村鹅厂
2022/08/11
5.3K0
[1214]基于Python实现视频去重
一款基于Python语言的视频去重复程序,它可以根据视频的特征参数,将重复的视频剔除,以减少视频的存储空间。它的基本原理是:首先利用Python语言对视频文件进行解析,提取视频的特征参数,如帧率、码率等;然后根据特征参数,生成视频的哈希值;最后,将每个视频的哈希值进行对比,如果哈希值相同,则表示视频内容相同,可以将其中一个视频剔除,以节省存储空间。
周小董
2023/10/10
6930
FFmpeg 视频压缩与 Python 调用方法
下载链接:https://ffmpeg.org/download.html#build-linux
为为为什么
2023/02/21
1.3K0
OpenCV 系列教程1 | OpenCV 的 GUI 特性
Matplotlib是一个用于Python的绘图库,它提供了多种绘图方法。在这里,将学习如何使用 Matplotlib 显示图像。可以使用 Matplotlib 放大图片,保存图片等。
机器视觉CV
2019/07/15
3.7K0
OpenCV 系列教程1 | OpenCV 的 GUI 特性
保存rtsp视频流
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/02
2.3K0
使用Opencv-python库读取图像、本地视频和摄像头实时数据
Python中使用OpenCV读取图像、本地视频和摄像头数据很简单, 首先需要安装Python,然后安装Opencv-python库
ccf19881030
2024/05/24
1.9K0
使用Opencv-python库读取图像、本地视频和摄像头实时数据
【python-opencv】读取、显示、保存视频
要捕获视频,你需要创建一个 VideoCapture 对象。它的参数可以是设备索引或视频文件的名称。设备索引就是指定哪个摄像头的数字。正常情况下,一个摄像头会被连接(就像我的情况一样)。所以我简单地传0(或-1)。你可以通过传递1来选择第二个相机,以此类推。在此之后,你可以逐帧捕获。但是在最后,不要忘记释放俘虏。
西西嘛呦
2020/08/26
8.2K0
OpenCV学习笔记(Python)
警告: 就算图像的路径是错的, OpenCV 也不会提醒你的,但是当你使用命 令print img时得到的结果是None。
一点儿也不潇洒
2018/08/07
3.8K0
OpenCV学习笔记(Python)
视频跳帧
import cv2 cap=cv2.VideoCapture('C:/Users/xpp/Desktop/Lena.mp4') target='C:/Users/xpp/Desktop/result.mp4' i=0 fps=int(round(cap.get(cv2.CAP_PROP_FPS)))#帧率 width=int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))#分辨率-宽度 height=int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
裴来凡
2022/05/29
1.4K0
视频跳帧
Python生成字符视频
在之前也写过生成字符视频的文章,但是使用的是命令行窗口输出,效果不是很好,而且存在卡顿的情况。于是我打算直接生成一个mp4的字符视频。大致思路和之前一样:Python20行代码实现视频字符化。
ZackSock
2021/05/18
6120
Python生成字符视频
opencv︱图片与视频的读入、显示、写出、放缩与基本绘图函数介绍
opencv中读入、显示、写出图片:cv2.imread(), cv2.imshow(), cv2.imwrite()
悟乙己
2019/05/26
5.9K0
openCV 视频分解及合成
1. 视频分解 import cv2 # ************************** # 分解视频 cap=cv2.VideoCapture('1.mp4')#获取一个视频cap isOpen=cap.isOpened()#判断是否打开 fps=cap.get(cv2.CAP_PROP_FPS)#频率,一秒多少张图片 width=int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))#宽 height=int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT
py3study
2020/01/22
1K0
4步实现树莓派人脸识别、拍照与推送
大部分童鞋的树莓派是不是一直在吃灰呢?一直闲置着,倒不如用它做一个简易监控,如果检测到人脸后,就拍照上传到指定地方,或发消息提醒。
小锋学长生活大爆炸
2021/01/05
1.7K0
4步实现树莓派人脸识别、拍照与推送
有贼出没?看我用python来捉"贼"
最近自己的工位老是丢东西,关键只丢一样东西,而且每天早上来,桌子上都是乱七八糟的。像是遭了贼。
赵云龙龙
2019/11/03
6560
4步实现树莓派人脸识别、拍照与推送、舵机旋转
大部分童鞋的树莓派是不是一直在吃灰呢?一直闲置着,倒不如用它做一个简易监控,如果检测到人脸后,就拍照上传到指定地方,或发消息提醒。
小锋学长生活大爆炸
2022/03/29
7550
4步实现树莓派人脸识别、拍照与推送、舵机旋转
Python基于opencv调用摄像头获取个人图片的实现方法
接触图像领域的应该对于opencv都不会感到陌生,这个应该算是功能十分强劲的一个算法库了,当然了,使用起来也是很方便的,之前使用Windows7的时候出现多该库难以安装成功的情况,现在这个问题就不存在了,需要安装包的话可以去我的资源中下载使用,使用pip安装方式十分地便捷。
matinal
2020/11/27
1.8K0
Python基于opencv调用摄像头获取个人图片的实现方法
虽然现在有可以去码的软件了,可视频是如何自动跟踪打码的?
它的身影随处可见,刷脸支付,信息审核,监控搜索等,除了这些常规操作,还可以对视频里的特定人物进行打码。
松鼠爱吃饼干
2020/09/12
6040
虽然现在有可以去码的软件了,可视频是如何自动跟踪打码的?
虽然现在有可以去码的软件了,可视频是如何自动跟踪打码的?
它的身影随处可见,刷脸支付,信息审核,监控搜索等,除了这些常规操作,还可以对视频里的特定人物进行打码。
松鼠爱吃饼干
2020/09/15
5400
虽然现在有可以去码的软件了,可视频是如何自动跟踪打码的?
基于Aidlux平台实现ONNX Runtime部署-水果分类-摄像头和视频
连接Aidlux后,使用jupyter notebook --allow-root进行Aidlux平台联系的jupyter notebook安装配置环境:
用户10686717
2023/08/07
3690
推荐阅读
相关推荐
python提取视频第一帧图片
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验