一、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进行视频分镜处理相关推荐

  1. #计算机视频处理 使用ffmpeg对视频进行操作、视频分镜

    参考文档: 官网 音视频处理工具ffmpeg ffmpeg官方文档 音视频合成分割 基本用法 ffmpeg 处理视频音频 转化方式 编码 转化格式 ffmpeg -i out.mp4 -vcodec ...

  2. Python软件设计基础 第五节-基于图像相似度比较实现视频分镜

    目录 一.前言 一.基础算法-判断两张图片是否相等/相似 (一)基于相等判断图像是否相同 (二)基于numpy计算图像是否相似 (三)基于哈希判断图像是否相似 (四)基于各种哈希计算图片相似度 1.均 ...

  3. week6 视频分镜

    任务 在Windows10系统下,用python,在jupyter notebook,对week5中"将视频每一帧保存成图像"的基础上,通过自定义的均值哈希算法.各通道直方图两种方 ...

  4. 课5 视频分镜的处理

    一.对视频进行处理,分解成一帧一帧的图片保存到一个新建的文件夹: import os import cv2 import subprocessv_path='lulu.mp4' image_save= ...

  5. 利用Python视频处理分镜——FFmpeg、OpenCV

    一.视频处理的简单命令 视频处理的思路是先将视频分解成一帧一帧的图像,对每一帧进行处理,处理好后再将帧合并为视频.会用到的模块包括OpenCV.FFmpeg等. OpenCV:强大的计算机视觉库,可以 ...

  6. Python视频处理(2)——Flask网页开发+分镜

    目录 一.主程序基本结构 1.安装并导入Flask 2.创建Flask对象(很重要的一步,不能忘记) 3.编写主程序 4.路由 5.完整代码 二.渲染网页 三.定义分镜相关函数 1.定义切帧函数并调用 ...

  7. 短视频自导自演,分镜脚本如何设计

    前言: 在进入主题之前我先强调一下,这篇完全是番外,小编的主线还是以编码类为重的文章.至于原因有两点,一是距离上次更新到现在已经快一个月,所以先总结一下近期玩的东西补上.二是我确实正在再次尝试做短视频 ...

  8. 帮我写8寸循环风扇分镜,需要宣传台面地面2合1 两用,循环吹风,材质肤感高级,多模式选择,上下左右摇头,做成45秒视频10个分镜脚本,并写出这10个镜头之间转场如何运镜...

    分镜脚本: 镜头1:开场镜头,展示循环风扇外观.材质和特点.持续时间:5秒. 镜头2:展示风扇的多模式选择,可以在多种风力模式中自由选择.持续时间:3秒. 镜头3:展示风扇上下左右摇头的功能.持续时间 ...

  9. flask均值哈希网页分镜

    利用哈希算法的网页分镜: 首先导入包 from flask import Flask,render_template import os import cv2 import numpy as np i ...

最新文章

  1. 组态王怎么做超级曲线_鲁班修图:一款超级好用的修图软件
  2. DeepMind发布最新原始音频波形深度生成模型WaveNet,将为TTS带来无数可能
  3. 【实习内推】2020腾讯产品暑期实习招聘
  4. 理解域信任关系,Active Directory系列之十六
  5. 什么是springboot框架
  6. 【优化算法】群居蜘蛛优化算法(SSO)【含Matlab源码 1452期】
  7. 一起学习R软件吧——R软件的使用
  8. 用shell脚本在consul注册exporter服务
  9. 【测试记录】基于pdf论文提取论文doi—pdf2doi包的安装与使用
  10. nrf52+RFX2401的PA+LNA方案,基于softdevice驱动
  11. 苹果开发者账号Apple ID如何进行资料修改?
  12. 更换SSD系统盘-PE重装系统
  13. ★深度优先搜索+解空间树+递归,三合一详解
  14. 印象笔记Mac版的快捷键有哪些?
  15. 什么是低电压处理器 笔记本CPU标准与低电压区别对比
  16. 小米盒子4S Pro好不好,对比当贝盒子B1有什么缺点
  17. C/C++ Qt StatusBar 底部状态栏应用
  18. BS工作原理—BS总结
  19. 比DOORS好用的需求管理系统有哪些?对比10大需求管理工具
  20. 分布式 PostgreSQL - Citus 架构及概念

热门文章

  1. Python基础之进程(Process)
  2. 如何判断 IE 的真正版本(非兼容模式下的版本,IE8+)
  3. java中mvc模式是什么_什么是MVC模式 MVC模式中三者之间关系
  4. 转:模糊的雅黑字体及解决方法
  5. 如何成为一名真正黑客
  6. 【解决方案】“月子会所”事件的背后,如何做好行业监管?
  7. Asp.net Cookie使用与简介
  8. SupeSite模板参数说明
  9. 怎样成为快速阅读的高手(中)
  10. C++入门第一课:HelloWorld