利用pycharm进行视频分镜处理
一、Hi,Flask!
在pycharm里创建新文件,命名为main.py
from flask import Flask,render_template
app=Flask(__name__)
#__name__是类,区别于app这个实例,app继承类的所有属性和方法 @app.route('/')def index():return("Hi,Flask!")if "__main__"==__name__:app.run(port="5008")
#5008可改为其他,默认5000
运行结果:
打开该网页即可在前端看到“Hi,Flask!”
二、templates文件夹
新建文件夹,命名为templates(必须命名为templates),用于存放所有html文件
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Flask 分镜</title>
</head>
<body>
视频分镜
</body>
</html>
同时将main.py中的代码修改为:
from flask import Flask,render_template
app=Flask(__name__)
#__name__是类,区别于app这个实例,app继承类的所有属性和方法 @app.route('/')def index():#return("Hi,Flask!")return render_template('index.html')if "__main__"==__name__:app.run(port="5008")
#5008可改为其他,默认5000
运行后可在网页端得到“视频分镜”字样
三、视频分镜
新建文件夹static,用于存放视频、图片等文件
定义genFrame()用于对视频进行分帧:
from flask import Flask,render_template
import os
import cv2app=Flask(__name__)def genFrame():v_path='static/视频名.mp4'image_save='static/pic'if not(os.path.exists(image_save)):os.mkdir(image_save)cap=cv2.VideoCapture(v_path)fc=cap.get(cv2.CAP_PROP_FRAME_COUNT)for i in range(int(fc)):_,img=cap.read()cv2.imwrite('static/pic/image{}.jpg'.format(i),img)@app.route('/')
def index():genFrame() return render_template('index.html')if "__main__"==__name__:app.run()
修改html文件代码为:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Flask 分镜</title>
</head>
<body>
视频分镜
<br>
<video width="640" height="480" controls autoplay><source src="ghz.mp4" type="video/mp4"><object data="ghz.mp4" width="640" height="480"><embed width="640" height="480" src="ghz.mp4"></object>
</video>
<br>
帧数:{{framecount}}<br>
{% for i in range(framecount) %}<img height="20" src="{{pic1}}{{i}}.jpg" />
{% endfor %}
</body>
</html>
其中:{undefined{}}里面是绑定的参数,{%%}里面可以简单使用一些python的语句,是在html里调用python语句的用法
运行结果:
四、使用哈希算法进行视频分镜
在templates新建hash.html文件,并在文件中引用哈希算法:
import cv2
import numpy as np
import matplotlib.pyplot as plt
import osdef aHash(img):# plt.imshow(img)# plt.axis('off')# plt.show()img = cv2.resize(img, (8, 8))# plt.imshow(img)# plt.axis('off')# plt.show()# 转换为灰度图gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)s = 0hash_str = ''# 遍历累加求像素和for i in range(8):for j in range(8):s = s + gray[i, j]# 求平均灰度avg = s / 64# 灰度大于平均值为1相反为0生成图片的hash值for i in range(8):for j in range(8):if gray[i, j] > avg:hash_str = hash_str + '1'else:hash_str = hash_str + '0'return hash_str# Hash值对比
def cmpHash(hash1, hash2):n = 0print(hash1)print(hash2)# hash长度不同则返回-1代表传参出错if len(hash1) != len(hash2):return -1# 遍历判断for i in range(len(hash1)):# 不相等则n计数+1,n最终为相似度if hash1[i] != hash2[i]:n = n + 1return n# img1 = cv2.imread('pic/image0.jpg') # 11--- 16 ----13 ---- 0.43
# img2 = cv2.imread('pic/image1.jpg')
#
# hash1 = aHash(img1)
# hash2 = aHash(img2)
# n = cmpHash(hash1, hash2)
# print('均值哈希算法相似度:', n)
#
# n = classify_hist_with_split(img1, img2)
# print('三直方图算法相似度:', n)def genFrame():v_path='static/ghz.mp4'image_save='static/hash'if not(os.path.exists(image_save)):os.mkdir(image_save)cap=cv2.VideoCapture(v_path)fc=cap.get(cv2.CAP_PROP_FRAME_COUNT)_, img1 = cap.read()cv2.imwrite('static/hash/image{}.jpg'.format(0), img1)for i in range(int(fc)-1):_, img2 = cap.read()hash1 = aHash(img1)hash2 = aHash(img2)n = cmpHash(hash1, hash2)if (n>40):cv2.imwrite('static/hash/image{}.jpg'.format(i),img2)img1=img2
genFrame()
注意:n的值随引用视频的不同而变化,n的值不合适可能会报错
index.html代码几乎不变,将main.py修改成:
from flask import Flask,render_template,request
import os
import cv2
import imageColorapp = Flask(__name__)def genFrame():v_path = 'ghz.mp4'image_save = 'pic'if not (os.path.exists(image_save)):os.mkdir(image_save)cap = cv2.VideoCapture(v_path)fc = cap.get(cv2.CAP_PROP_FRAME_COUNT)for i in range(int(fc)):_,img=cap.read()cv2.imwrite('static/pic/image{}.jpg'.format(i),img)@app.route('/')
def index():pic='static/pic/image'framecount=500return render_template('index.html',pic1=pic,framecount=framecount)@app.route('/hash')
def hash():path='static/hash'filename=os.listdir(path)print(type(filename))print(filename)imgcount=len(filename)return render_template('hash.html',imgcount=imgcount,filename=filename)if "__main__"==__name__:app.run(port="5008")
分帧后图片存在hash文件夹中,一共5张
网页端运行结果显示为:
利用pycharm进行视频分镜处理相关推荐
- #计算机视频处理 使用ffmpeg对视频进行操作、视频分镜
参考文档: 官网 音视频处理工具ffmpeg ffmpeg官方文档 音视频合成分割 基本用法 ffmpeg 处理视频音频 转化方式 编码 转化格式 ffmpeg -i out.mp4 -vcodec ...
- Python软件设计基础 第五节-基于图像相似度比较实现视频分镜
目录 一.前言 一.基础算法-判断两张图片是否相等/相似 (一)基于相等判断图像是否相同 (二)基于numpy计算图像是否相似 (三)基于哈希判断图像是否相似 (四)基于各种哈希计算图片相似度 1.均 ...
- week6 视频分镜
任务 在Windows10系统下,用python,在jupyter notebook,对week5中"将视频每一帧保存成图像"的基础上,通过自定义的均值哈希算法.各通道直方图两种方 ...
- 课5 视频分镜的处理
一.对视频进行处理,分解成一帧一帧的图片保存到一个新建的文件夹: import os import cv2 import subprocessv_path='lulu.mp4' image_save= ...
- 利用Python视频处理分镜——FFmpeg、OpenCV
一.视频处理的简单命令 视频处理的思路是先将视频分解成一帧一帧的图像,对每一帧进行处理,处理好后再将帧合并为视频.会用到的模块包括OpenCV.FFmpeg等. OpenCV:强大的计算机视觉库,可以 ...
- Python视频处理(2)——Flask网页开发+分镜
目录 一.主程序基本结构 1.安装并导入Flask 2.创建Flask对象(很重要的一步,不能忘记) 3.编写主程序 4.路由 5.完整代码 二.渲染网页 三.定义分镜相关函数 1.定义切帧函数并调用 ...
- 短视频自导自演,分镜脚本如何设计
前言: 在进入主题之前我先强调一下,这篇完全是番外,小编的主线还是以编码类为重的文章.至于原因有两点,一是距离上次更新到现在已经快一个月,所以先总结一下近期玩的东西补上.二是我确实正在再次尝试做短视频 ...
- 帮我写8寸循环风扇分镜,需要宣传台面地面2合1 两用,循环吹风,材质肤感高级,多模式选择,上下左右摇头,做成45秒视频10个分镜脚本,并写出这10个镜头之间转场如何运镜...
分镜脚本: 镜头1:开场镜头,展示循环风扇外观.材质和特点.持续时间:5秒. 镜头2:展示风扇的多模式选择,可以在多种风力模式中自由选择.持续时间:3秒. 镜头3:展示风扇上下左右摇头的功能.持续时间 ...
- flask均值哈希网页分镜
利用哈希算法的网页分镜: 首先导入包 from flask import Flask,render_template import os import cv2 import numpy as np i ...
最新文章
- 组态王怎么做超级曲线_鲁班修图:一款超级好用的修图软件
- DeepMind发布最新原始音频波形深度生成模型WaveNet,将为TTS带来无数可能
- 【实习内推】2020腾讯产品暑期实习招聘
- 理解域信任关系,Active Directory系列之十六
- 什么是springboot框架
- 【优化算法】群居蜘蛛优化算法(SSO)【含Matlab源码 1452期】
- 一起学习R软件吧——R软件的使用
- 用shell脚本在consul注册exporter服务
- 【测试记录】基于pdf论文提取论文doi—pdf2doi包的安装与使用
- nrf52+RFX2401的PA+LNA方案,基于softdevice驱动
- 苹果开发者账号Apple ID如何进行资料修改?
- 更换SSD系统盘-PE重装系统
- ★深度优先搜索+解空间树+递归,三合一详解
- 印象笔记Mac版的快捷键有哪些?
- 什么是低电压处理器 笔记本CPU标准与低电压区别对比
- 小米盒子4S Pro好不好,对比当贝盒子B1有什么缺点
- C/C++ Qt StatusBar 底部状态栏应用
- BS工作原理—BS总结
- 比DOORS好用的需求管理系统有哪些?对比10大需求管理工具
- 分布式 PostgreSQL - Citus 架构及概念