任务
在windows10系统下,通过代码编辑器PyCharm写入python程序,构建flask框架实现web端查看。将通过均值哈希算法或各通道直方图相似度计算完成视频分帧、分镜(week6已完成)迁移至web端显示;利用Scipy-kmeans对图片进行聚类色彩提取。
目录
Ⅰ均值哈希算法
py文件:
导入所需各库,实例化flask对象,定义均值哈希算法的函数,得出相似度指数。
from flask import Flask, render_template
import os
import cv2
app = Flask(__name__)
def aHash(img):
img = cv2.resize(img, (8, 8))
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
s = 0
hash_str = ""
for i in range(8):
for j in range(8):
s = s + gray[i, j]
avg = s / 64
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
def cmpHash(hash1, hash2):
gap = 0
if len(hash1) != len(hash2):
return -1
for i in range(len(hash1)):
if hash1[i] != hash2[i]:
gap = gap + 1
similar=1-gap/64
return similar
定义函数:对视频分帧,保存所有图片,对保存的图片依次(非相邻图片,而是以上一次临界图片为中心,遍历所有图片)进行均值哈希算法比对相似度,保存差异巨大的图片,从而得出视频分镜。
离线计算出视频分镜的结果,即在web端请求访问前就运算好。
def genFrame():
v_path="static/video.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)
filelist = os.listdir("static/pic")
img1=cv2.imread("static/pic/image0.jpg")
cv2.imwrite(os.path.join("static/p", filelist[0]), img1)
for i in range(len(filelist) - 1):
img2 = cv2.imread("static/pic/" + "image{}".format(i + 1) + ".jpg")
sim = cmpHash(aHash(img1), aHash(img2))
if s