使用OpenCV和Python生成视频条形码
使用OpenCV和Python生成视频条形码
- 1. 效果图
- 2. 原理
- 2.1 步骤
- 2.2 项目结构
- 3. 源码
- 参考
这篇博客将演示如何使用Python + OpenCV生成视频条形码。
生成视频条形码通常是出于设计美感,它不具有广泛的计算机视觉/图像处理目的(除了可视化本身)。也就是说,可以将电影条形码视为“特征向量”的形式,并使用它们来比较其他电影条形码/电影剪辑的相似性,甚至确定给定剪辑出现在视频中的位置。
1. 效果图
视频生成的条形码如下图所示:
该电影条形码在很大程度上由Matrix风格的灰色所支配;可以根据条形码的每一部分确定每一帧的大致图像;
2. 原理
2.1 步骤
确定视频文件中的帧数。计算电影中的帧总数可以使我们了解应该在电影条形码可视化中包含多少帧。帧过多,我们的条形码将非常庞大;太少的帧和电影条形码在美学上将不令人满意。
生成影片条形码数据。一旦知道要包含在电影条形码中的视频帧总数,我们就可以遍历第N个帧并计算RGB平均值,并在运行时保留一系列平均值。这是我们实际的电影条形码数据。
显示影片条形码。给定一组帧的RGB平均列表,我们可以获取此数据并创建显示在屏幕上的实际电影条形码可视化。
2.2 项目结构
|— output/
|— videos/
|— count_frames.py
|— generate_barcode.py
|— visualize_barcode.py
3. 源码
# USAGE
# python count_frames.py --video videos/example.avi
# python generate_barcode.py --video videos/example.avi --output output/example.json --skip 25
# python visualize_barcode.py --avgs output/example.json --barcode output/example.png --barcode-width 5# 有了电影中各帧的RGB平均值,可以将其可视化import argparse
import jsonimport cv2
# 导入必要的包
import numpy as np# 构建命令行参数及解析
# --avgs RGB均值json文件路径
# --barcode 条形码可视化图像生成路径
# --height 输出条形码图像高度,默认250px
# ----barcode-width 输出条形码每帧的图像宽度,默认1px
ap = argparse.ArgumentParser()
ap.add_argument("-a", "--avgs", required=True,help="path to averages JSON file")
ap.add_argument("-b", "--barcode", required=True,help="path to output barcode visualization image")
ap.add_argument("-t", "--height", type=int, default=250,help="height of output barcode image")
ap.add_argument("-w", "--barcode-width", type=int, default=1,help="width of each bar in output image")
args = vars(ap.parse_args())# 从磁盘加载序列化的RGB均值,并转换为np数组
avgs = json.loads(open(args["avgs"]).read())
avgs = np.array(avgs, dtype="int")# 获取单独的条码宽度、高度,并为条形码可视化图像分配内存
bw = args["barcode_width"]
barcode = np.zeros((args["height"], len(avgs) * bw, 3),dtype="uint8")# 遍历RGB均值,并为list中的每一帧创建一个条形块
for (i, avg) in enumerate(avgs):# ndarry 转 list 转 tuple ------ tuple(avg.tolist())cv2.rectangle(barcode, (i * bw, 0), ((i + 1) * bw, args["height"]), tuple(avg.tolist()), -1)# 将视频条形码可视化图像保存并展示
cv2.imwrite(args["barcode"], barcode)
cv2.imshow("Barcode", barcode)
cv2.waitKey(0)
参考
- https://www.pyimagesearch.com/2017/01/16/generating-movie-barcodes-with-opencv-and-python/
使用OpenCV和Python生成视频条形码相关推荐
- Qt - OpenCV 连续图片生成视频
Qt - OpenCV 连续图片生成视频 此博客始创于:http://blog.csdn.net/lys211 转载请注明出处 主要是测试OpenCV将连续命名的图片转换成视频的过程. OpenCV的 ...
- Python生成Code128C条形码实现——轻松打造高效标识码!
Python生成Code128C条形码实现--轻松打造高效标识码! Code128C是一种数字型条形码,适用于需要大量数字编码的场合.它能够表示1-128个 ASCII 码字符,具有高密度.可靠性强等 ...
- Python生成Code128C条形码:打印高效、识别准确
Python生成Code128C条形码:打印高效.识别准确 在如今这个信息时代,条形码已经成为了生活工作中不可缺少的一部分,而Code128C条形码也是其中的一种常见类型.本文将带您了解如何使用 Py ...
- python opencv录制视频_如何使用OpenCV和Python录制视频?
我已经看过OpenCV的Python example介绍了如何使用VideoCapture和VideoWriter来捕获和写出视频文件.但我一直在想:OpenCV Error: Assertion f ...
- python生成视频_成为视频分析专家:自动生成视频集锦(Python实现)
介绍 我是个超级板球迷.从我记事起,我就迷上了这项运动,至今它仍在我的日常生活中起着重要的作用.我相信很多读到这篇文章的人都会点头! 但是自从我开始工作以来,要跟上所有的比赛就成了一件棘手的事.我不能 ...
- 使用 OpenCV 和 Python 从视频中快速提取帧
**更新(2020 年 7 月):**我现在使用并建议使用Decod在 Python 中更快地加载视频.您可以进一步查看原始的 OpenCV 版本.
- 基于opencv,使用python提取视频帧以及提取TVL1光流
处理视频,最常用的开源工具箱非opencv莫属了,python可以很好的支持它. 一 从视频读取帧.得到相关属性.并设置保存哪些帧 首先:我们得新建一个videocapture对象: cap=cv2. ...
- opencv将图片生成视频
CV_FOURCC获取编码格式: CV_FOURCC('P', 'I', 'M', '1') = MPEG-1 codec CV_FOURCC('M', 'J', 'P', 'G
- 使用OpenCV和Python高效计算视频的总帧数
使用OpenCV和Python高效计算视频的总帧数 1. 效果图 2. 源码 参考 这篇博客将介绍两种使用OpenCV和Python计算视频文件中帧数的方法. 超级快,它依靠OpenCV的视频属性功能 ...
最新文章
- 浅析SQL Server数据修复命令DBCC的使用
- Java心得--键值、枚举器
- 机器学习实验中的编程技术(part1)--numpy
- ubuntu11.10乱码解决
- mysql doen s exist_Mysql中大小写敏感问题导致的MySql Error 1146 Tabel doen’t exist错误
- django集成原有数据库
- 横琴今年建物联网基础设施
- 高中信息技术——GoldWave音频处理刷题点整理
- 应用Mongoose开发MongoDB(1)数据库连接
- 服务器lsass系统错误,电脑开机提示lsass.exe系统错误无法进入系统的解决方法
- 搭建sip软电话环境
- 使用用AI制作logo图标教程
- 【MySQL】014-join连接语句用法详解
- HTML单机玩游戏,电脑十大耐玩单机游戏,推荐10个经典单机游戏
- 311运动(冰箱与内裤)的由来
- cadence 旋转快捷键_cadence快捷键
- SQLserver服务器修复,sqlserver数据库修复工具大师官方版
- Flink的流处理与批处理
- java中将html语言转换_JAVA中将html转换成pdf
- 考研秘籍——考研流程及初试备战
热门文章
- seq2seq与Attention机制
- Python案例:使用XPath的爬虫
- 感受hook里useEffect的执行顺序,hook倒计时
- 大话设计模式笔记(七)の原型模式
- 小乐乐打游戏(BFS+曼哈顿距离)
- python几种数据类型的取值方式
- Hibernate **关于hibernate4.3版本之后org.hibernate.service.ServiceRegistryBuilder被弃用**
- 蒟蒻吃药计划-治疗系列 #round 2 合并石子+乘积最大
- PyTorch 笔记(04)— Tensor 属性方法(获取元素个数numel/neleme、查看形状size()/shape、增减维度squeeze()/unsqueeze()、resize形状)
- [maven] 使用问题及思考汇总