Class6——筛选后显示+scipy色彩聚类
一、用哈希算法将图片筛选后显示在网页上
Hash.py
from flask import Flask,render_template
import cv2
import osapp=Flask(__name__)def aHash(img):# 缩放为8*8img = cv2.resize(img, (8, 8))# 转化为灰度图gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# s为像素和初值为0,hash_str为hash值初值为''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 + 1sim=1-n/64return simdef 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)_,img1=cap.read()cv2.imwrite('static/Hash2021/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<0.6:cv2.imwrite('static/Hash2021/image{}.jpg'.format(i),img2)img1=img2genFrame()
hash.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
均值哈希帧数:{{framecount}}<br>
{% for i in range(framecount) %}
<img height="40" src="static/Hash2021/{{filename[i]}}" />
{{filename[i]}}
{% endfor %}
</body>
</html>
在main.py加上
@app.route('/shot')
def shot():path='static/Hash2021'filename=os.listdir(path)framecount=len(filename)print(filename)print(type(filename))print(filename)return render_template('hash.html',filename=filename,framecount=framecount)
二、scipy色彩聚类
1.用图片的缩略图进行聚类
import os
import numpy as np
from PIL import Image
import matplotlib.pyplot as pltim=np.array(Image.open('hk7.jpg'))#用缩略图聚类
def colorz(filename,n=3):img=Image.open(filename)img=img.rotate(-90)img.thumbnail((200,200))w,h=img.sizeprint(w,h)print('w*h=',w*h)plt.axis('off')plt.imshow(img)plt.show()points=[]for count,color in img.getcolors(w*h):points.append(color)return pointscolorz('hk7.jpg',3)
2.对色彩进行聚类
#对色彩聚类
from scipy.cluster.vq import vq, kmeans, whiten
import matplotlib.pyplot as plt
import numpy as nppoints=colorz('hk7.jpg',3)
print(points[0:10]) fe=np.array(points,dtype=float) #聚类需要是float或者double
print(fe[0:10])
book=np.array((fe[100],fe[1],fe[8],fe[8]))
print(type(book))
print('book: \n',book)codebook, distortion=kmeans(fe,7)print('codebook:', codebook)
centers=np.array(codebook,dtype=int)
print(centers)
print('distortion:',distortion)fe=np.array(points)
plt.scatter(fe[:,0],fe[:,2],c='b')
plt.scatter(codebook[:,0],codebook[:,2],c='r')
plt.show()
Class6——筛选后显示+scipy色彩聚类相关推荐
- excel 如何 筛选,以及筛选后,在复制时 显示 不可对多重选定区域使用此命令的解决办法...
excel 如何 筛选,以及筛选后,在复制时 显示 不可对多重选定区域使用此命令的解决办法 选中 第一行, 开始 筛选 选择 某一列 右下角的小三角 ,进行内容筛选 即可. excel 筛选后,在复制 ...
- Python,OpenCV提取图片中的多个茄子种子轮廓,并按从左到右排序后显示
Python,OpenCV提取图片中的多个茄子种子轮廓,并按从左到右排序后显示 1. 效果图 2. 源码 写这篇博客源于博友的提问,期望把下图中的多个茄子种子按从左到右的顺序提取出来: 1. 效果图 ...
- 筛选后系列填充_案例分享10——如何在筛选后的表格中粘贴数据(二)
首先要诚挚感谢一路关注和支持我的你们~ 今天凌晨,公众号关注量突破500,成功开通了流量主功能啦!相信细心的你们也注意到了文章底部的不同了~ 感谢大家的支持与肯定,我会从易到难,坚持分享Excel的操 ...
- php利用表格敬将所选择的数据显示出来,单元格下拉筛选设置/Excel对筛选后的单元格进行下拉填充...
EXCEL里怎样让一个单元格能有下拉菜单? 要设置下拉菜单的单元格(或格区)----数据---有效---"允许"中选择"序"---"来源"中 ...
- 筛选后系列填充_不会用Excel做数据筛选,老板叼的你没话说!
很多人会做漂亮的表格,自信满满地给老板汇报,老板突然冒出一句话:你给我看下公司员工的学历分布情况. 这个问题能瞬间让很多人傻眼,自然少不了老板的一顿叼.其实数据筛选并不难,只要认真学,10分钟轻松搞定 ...
- excel自动筛选后分别复制粘贴到新文件的解决办法
面对着一张包含全省数据的Excel表格,我们常常需要按其中某一列的数据通过自动筛选归类,然后以归类的名字新建Excel并将筛选的结果粘贴到新表中. 自动筛选后直接复制粘贴是会把数据全部粘到新表中的的, ...
- Excel筛选后数据行数
数据筛选是常用的功能,简单高效.原始数据如下. 筛选一下Garde=2的数据,Excel的状态条上就显示"在7条记录中找到3个",可见数据是3行. 但是VBA中没有提供直接访问这个 ...
- Excel2021 无法复制筛选后的合并单元格数据提示无法操
环境: Win10 专业版 Excel 2021 问题描述: Excel2021 无法复制筛选后的合并单元格数据,提示无法操作,怎么才能复制这些数据 解决方案: 1.之前筛选出重复值用红色显示(是我想 ...
- 计算机公式筛选,Excel数据汇总计算的套路:5种筛选后的数据处理技巧
1.筛选后填充序号 表格中的序号我们一般利用拖动或双击鼠标来填充,但在使用筛选功能后,筛选出的部分数据,序号是不连续的,如何让序号在筛选后也是从1开始递增显示呢? 在A2单元格输入公式:=SUBTOT ...
- Excel表格自动筛选时显示合并单元格中全部记录的方法
今天给单位一个分公司导数据,因为报表是全司的,如何导成某一个分公司的呢? 1.复制合并单元格所在的A列到其他空白列,如本例中的列的E2:E18,这样做的目的是保留合并单元格的大小和样式. 2.选择A2 ...
最新文章
- 背包模型dp1:01背包,完全背包,多重背包的两大优化的详解
- 0421实验二 作业调度模拟程序
- 【Android 应用开发】Android屏幕适配解析 - 详解像素,设备独立像素,归一化密度,精确密度及各种资源对应的尺寸密度分辨率适配问题
- 帮助理解GAN的一些补充内容
- C++如何调用父类的方法?
- 电脑键盘下划线怎么打_图文详解笔记本电脑键盘失灵怎么办
- 【AI视野·今日Robot 机器人论文速览 第四期】Wed, 9 Jun 2021
- [Ajax] jQuery中的Ajax -- 04-异步提交表单
- 对于PHP大型开发框架的看法
- centos6使用docker部署zookeeper
- 安卓beforetextchanged_【已解决】Android中给EditText添加的TextWatcher中的onTextChanged始终被调用(被执行多次)...
- 不学无数——JAVA中NIO再深入
- php包含大马执行,对于某个PHP大马的分析
- unc0ver 越狱工具来袭,支持iOS11.0~iOS14.8稳定越狱 更新至V8.0.2 支持 A7-A14
- 黑客泄露澳大利亚大量求职者信息,其中包含11家重要公司名单
- QT实现打地鼠小游戏
- 手把手教你如何连接到宝塔面板创建的FTP空间
- 信用贷款违约预测项目
- Vue动态组件、组件缓存、组件激活和非激活、组件插槽、组件name
- 前端实现给文字添加动态背景
热门文章
- PG数据库按照30分钟时间片统计数据
- matlab gui 作者,MATLAB GUI设计学习手记(第4版)
- 数字图像处理大作业GUI设计
- 1753: [Usaco2005 qua]Who's in the Middle (快速排序)
- 信息安全实验:实现一个fake-wifi
- 如何为您的应用选择合适的微控制器?
- 以管理员身份运行闪退怎么解决_win7右击获得管理员权限时窗口闪退
- 计算机如何将两个磁盘合在一起,如何把两个磁盘合并在一起?
- 中译英提升:准译员如何“假装”自己很地道?丨打死个翻译官2.4
- 快速实现微信公众号支付功能