使用Python和OpenCV制作电影般的截屏相册!

news2024/9/28 19:16:53

目录

简介:

实现步骤:

代码说明:

报错error:

问题所在:

解决方法:

1)卸载:

2)重新安装:

3)安装成功:

 效果如下:


简介:

在今天的数字世界中,我们每天都会与大量的图像和视频打交道。那么,如何将这些图像和视频转化为有用的数据或有趣的体验呢?Python提供了一个强大的图像处理和计算机视觉库OpenCV,通过它,我们可以进行图像处理和分析,同时也可以用它来制作各种视觉效果。在这篇教程中,我们将介绍如何使用Python和OpenCV来制作一个电影般的截屏相册,它可以从视频中截取特定的帧,并将这些帧合并成一个PDF相册。这种技术可以用于自动化截取视频帧、制作视频预览或快照等方面,而且在学习计算机视觉方面也非常有用。跟随本教程,让我们一起来学习如何使用Python和OpenCV创建精美的截屏相册吧!

实现步骤:

下面是实现python视频截屏并保存为JPEG的简单步骤:

  1. 导入所需的库和模块:cv2、time、os。
  2. 读取要截屏的视频文件,使用cv2.VideoCapture()方法。
  3. 设置计数器变量,以便在指定的时间间隔截屏。
  4. 设置保存截图的文件夹路径,如果不存在,则创建一个新文件夹。
  5. 进入while循环并使用cv2方法读取每一帧视频。
  6. 检查计数器是否达到指定间隔,并在达到指定间隔时保存截屏。
  7. 递增计数器变量,继续读取下一帧视频。
  8. 释放视频资源和销毁所有窗口。
import cv2
import time
import os

# 读取要截屏的视频文件
cap = cv2.VideoCapture('path/to/video/file.mp4')

# 设置截屏时间间隔(单位:秒)
interval = 10

# 设置截图保存的文件夹路径
folder_path = 'path/to/folder/containing/screenshots'

# 如果文件夹不存在,则创建一个新的文件夹
if not os.path.exists(folder_path):
    os.makedirs(folder_path)

# 初始化计数器变量
count = 0

while(cap.isOpened()):
    # 读取视频帧
    ret, frame = cap.read()
    
    if ret == True:
        # 检查计数器是否达到指定间隔
        if count % (interval * 30) == 0: # 1秒=30帧
            # 指定截图文件名
            filename = os.path.join(folder_path, f'screenshot_{count}.jpeg')
            # 保存截图
            cv2.imwrite(filename, frame)
        
        # 递增计数器
        count += 1
        
        # 显示当前帧
        cv2.imshow('frame',frame)
        
        # 等待33毫秒,显示下一帧
        if cv2.waitKey(33) & 0xFF == ord('q'):
            break
    else:
        break

# 释放视频资源和销毁所有窗口
cap.release()
cv2.destroyAllWindows()

代码说明:

在这个示例代码中,计数器变量被设置为0,每当它达到指定的时间间隔时,就会将当前帧保存为JPEG文件。默认情况下,截屏的JPEG文件将被保存到指定的文件夹中。如果你想要更改间隔时间或文件夹路径,只需修改interval和folder_path变量即可。

报错error:

File "d:\spiderdocs\mp4screenshotjpeg.py", line 37, in <module>
    cv2.imshow('frame',frame)
cv2.error: OpenCV(4.7.0) D:\a\opencv-python\opencv-python\opencv\modules\highgui\src\window.cpp:1272: error: (-2:Unspecified error) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Cocoa support. If you are on Ubuntu or Debian, install libgtk2.0-dev 
and pkg-config, then re-run cmake or configure script in function 'cvShowImage'

问题所在:

这个错误是由于OpenCV库没有正确安装或没有支持GUI窗口的功能。建议重新安装OpenCV并确保使用支持GUI的版本,或者安装缺失的依赖项,如在Ubuntu或Debian中安装libgtk2.0-dev和pkg-config。如果重新安装和安装依赖项没有解决问题,您可能需要检查代码并确保使用正确的OpenCV函数来显示图像。

解决方法:

如何重新安装opencv?

在重新安装OpenCV之前,请先卸载现有版本以避免冲突。您可以通过运行以下命令来卸载OpenCV:

1)卸载:

pip uninstall opencv-python

2)重新安装:

pip install opencv-python[full]

3)安装成功:

 效果如下:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/381602.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DockQuery 天狼 v1.2.0 正式发布

DockQuery 天狼经过 2022 年的孵化&#xff0c;于 2022 年年底发布了第一个版本。 在春回大地万象更新之际&#xff0c;DockQuery 发布了 1.2.0 版本&#xff0c;也是我们公开招募第一批产品体验官的版本。 在这个版本中&#xff0c;DockQuery 主要专注以下几个主题&#xff…

电影《毒舌律师》观后感

上周看了《毒蛇律师》这部电影&#xff0c;讲述一位’大律师’在法庭为己方辩护&#xff0c;最终赢得辩护的故事。 &#xff08;1&#xff09;人之常情 说起法律相关&#xff0c;不禁会让人联想到讲法律相关知识的罗翔老师&#xff0c;平时也会看他相关视频&#xff0c;无论是亲…

开发中遇到的问题合集

集合相关 1.JDK版本冲突导致的报错 报错信息&#xff1a; Set.of、List.of、Path.of 如果在 JDK 1.8 的项目中使用 Set.of() 方法报错&#xff0c;可能是因为该方法是 JDK 9 中新增的&#xff0c;不被 JDK 1.8 所支持。 如果你需要在 JDK 1.8 中使用类似的功能&#xff0c;可…

前端:CSS

CSS基本语法规则&#xff1a;选择器若干属性声明 style标签&#xff1a;可以放到代码的任意位置处&#xff0c;head/body中都可以 三种写CSS的方式&#xff1a; 1、内部样式&#xff1a;使用style标签&#xff0c;直接把CSS写到html文件中。此时的style标签可以放到任何位置…

BMI160 BOSCH/博世 六轴 加速度 陀螺仪 传感器

BMI160 6轴惯性运动传感器&#xff0c;采用MEMS传感器封装&#xff0c;将16位3轴加速度计和超低功耗3轴陀螺仪集成在一起。当加速度计和陀螺仪在全速模式下运行时&#xff0c;耗电典型值低至950A&#xff0c;仅为市场上同类产品耗电量的50%或者更低。 Bosch BMI160专为智能手机…

7 款最好的免费 PDF 转 Word 转换器工具

将 PDF 到 Word 转换软件下载到您的计算机将节省您一遍又一遍地访问浏览器的时间。在执行转换任务时&#xff0c;您也不会受到文件大小或数量的限制。现在阅读这篇文章&#xff0c;了解可免费下载的 7 种最佳 PDF 转 Word 转换器软件&#xff0c;以及在转换器中寻找什么。 哪个…

浅谈React Fiber工作原理

静态数据结构 每个 Fiber 节点对应一个组件&#xff0c;保存了该组件的类型&#xff0c;对应的 DOM 节点的对应信息。 FiberRootNode 有且仅有一个&#xff0c;而 rootFiber 可以有多个&#xff0c;因为我们可以挂载多个应用&#xff08;也就是多次调用ReactDOM.render&#…

注解@EnableAutoConfiguration

上一节已经看了Import注解&#xff0c;而EnableAutoConfiguration注解中就引用了此注解 AutoConfigurationPackage Import(AutoConfigurationImportSelector.class) public interface EnableAutoConfiguration { 所以接下来可以看一下AutoConfigurationImportSelector类&…

Educational Codeforces Round 144 (Rated for Div. 2) E

人菜瘾大还是忍不住打了这场比赛&#xff0c;b卡了半小时&#xff0c;甚至还写了一个最长公共子序列然后喜提wa2&#xff0c;但是c,d还是过的比较快&#xff0c;最后排名rk175有惊无险的上分了&#xff0c;e题赛时一眼想出思路&#xff0c;但是我的实现能力有限&#xff0c;没能…

谷歌关键词排名上首页需要多久【2023年实战数据】

本文主要分享2023年实战得出谷歌做新站关键词排名到首页所需要的时间周期测试。 本文由光算创作&#xff0c;有可能会被剽窃和修改&#xff0c;我们佛系对待这种行为吧。 谷歌关键词排名上首页需要多久&#xff1f; 答案是&#xff1a;90天左右。 具体以下图实战数据为主 关…

【总结】记一次log4j包冲突引发es类找不到的问题

问题现象 某天&#xff0c;某个应用搞新的迭代&#xff0c;突然报ElasticSearch 7.17.5 相关操作都失败了&#xff0c;且问题是必现&#xff0c;本地启动也能稳定复现。组内小伙伴按照es jar包冲突排查了一番&#xff0c;无果&#xff0c;于是问题转交给我来排查。 错误信息是…

计算机网络(第三版) 胡亮 第四章知识点总结

计算机网络&#xff08;第三版&#xff09; 胡亮 第四章知识点总结 学习指导 1、掌握询问/确认、轮询/选择模式的使用场合与工作方式 2、掌握停止等待协议的流量控制和差错控制&#xff0c;会进行相关定量的计算。 3、掌握滑动窗口协议中的回退N和选择控制的工作方式 4、了…

重拾JS基础:掌握闭包和作用域链的秘密,让你代码更加简洁优雅

在 JavaScript 中&#xff0c;闭包和作用域链是两个重要的概念&#xff0c;对于理解 JavaScript 中函数的工作方式和实现高级功能非常关键。本文将介绍闭包和作用域链的概念、如何创建和使用闭包&#xff0c;以及如何避免常见的陷阱和错误。 引言 JavaScript 是一门具有函数式编…

基于神经网络的滑模鲁棒控制

目录 前言 1.双关节机械手臂模型 2.神经网络自适应律设计 3. 滑模控制律设计 4. 仿真分析 4.1 仿真模型 4.2 仿真结果 4.3 小结 5 学习问题 前言 上一篇文章我介绍了神经网络补偿的机理&#xff0c;只不过控制律不同&#xff0c;本章我们结合滑模理论设计控制律&#…

不同规划企业对CRM系统的性价比要求

很多企业在选型时关心CRM客户管理系统的价格&#xff0c;有人对CRM的价格完全没有概念&#xff0c;也有的人先问价格再看其他。CRM价格在系统选型中到底有多重要&#xff1f;如何评估CRM价格和价值之间的关系&#xff1f;企业规模对CRM系统价格有什么影响&#xff1f; CRM软件…

Android系统10 RK3399 init进程启动(四十八) init第一阶段分析

配套系列教学视频链接&#xff1a;安卓系列教程之ROM系统开发-百问100ask说明系统&#xff1a;Android10.0设备&#xff1a; FireFly RK3399 &#xff08;ROC-RK3399-PC-PLUS&#xff09;前言本文通过代码梳理的方式&#xff0c;给大家介绍Android init祖先进程第一阶段的工作流…

MAC地址申请MAC码购买流程MAC地址哪里申请MAC地址作用

众所周知mac地址号段全世界都是由美国一家政府机构IEEE进行分配的&#xff0c;也是由他们进行管理的。我站具有丰富的MAC地址申请经验&#xff0c;可以帮助客户有效的快速高效的完成MAC地址的申请。关于mac地址购买种类、范围、方式、费用详情如下。 一、服务项目&#xff1a;…

vue3、vite、pinia 快速入门

准备 开发工具及插件IDE:vscode,WebStorm插件&#xff1a;Auto Close Tag、Auto Rename Tag、Live Server通过“&#xff01;”快速生成html模板正式学习安装vue通过CDN的方式导入vue<script src"" target"_blank">https://unpkg.com/vue3/dist/vue.…

mysql数据库之索引分类

分类含义特点关键字主键索引针对于表中主键创建的索引默认自动创建&#xff0c;只能有一个primary唯一索引避免同一个表中某数据列中的值重复可以有多个unique常规索引快速定位特定数据可以有多个全文索引全文索引查找的是文本中的关键词&#xff0c;而不是比较索引中的值可以有…

01 Android基础--广播

01 Android基础--广播什么是广播&#xff1f;广播的分类本地广播LocalBroadcastManager什么是广播&#xff1f; 传输信息的机制。 主要记住三个要素&#xff1a;1.广播(Broadcast) - 用于发送广播; 2.广播接收器(BroadcastReceiver) - 用于接收广播&#xff1b;3.意图内容(Inte…