一、判断图片是否相等

1.基于相等判断图像是否相同

import operator
from PIL import Image
import os
os.chdir('e:\mediabigdata')a=Image.open('./img/image0.jpg')
b=Image.open('./img/image0.jpg')out=operator.eq(a,b)
print(out)

2.基于numpy计算图像是否相似

import numpy as np
from PIL import Imageimport os
os.chdir('e:\mediabigdata')a=Image.open('./img/image0.jpg')
b=Image.open('./img/image0.jpg')diff=np.subtract(a,b)
out=not np.any(diff)
print(out)

3.基于哈希判断

import hashliba=open('./img/image1.jpg','rb')
b=open('./img/image1.jpg','rb')amd5=hashlib.md5(a.read()).hexdigest()
bmd5=hashlib.md5(b.read()).hexdigest()print(amd5)
print(bmd5)

4.缩放图像,基于各种哈希判断

import cv2
import numpy as np
import matplotlib.pyplot as plt
import os# 均值哈希算法
def aHash(img):# 缩放为8*8plt.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为像素和初值为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# 差值感知算法
def dHash(img):# 缩放8*8img = cv2.resize(img, (9, 8))# 转换灰度图gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)hash_str = ''# 每行前一个像素大于后一个像素为1,相反为0,生成哈希for i in range(8):for j in range(8):if gray[i, j] > gray[i, j + 1]:hash_str = hash_str + '1'else:hash_str = hash_str + '0'return hash_str# 感知哈希算法(pHash)
def pHash(img):# 缩放32*32img = cv2.resize(img, (32, 32))  # , interpolation=cv2.INTER_CUBIC# 转换为灰度图gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 将灰度图转为浮点型,再进行dct变换dct = cv2.dct(np.float32(gray))# opencv实现的掩码操作dct_roi = dct[0:8, 0:8]hash = []avreage = np.mean(dct_roi)for i in range(dct_roi.shape[0]):for j in range(dct_roi.shape[1]):if dct_roi[i, j] > avreage:hash.append(1)else:hash.append(0)return hash# 通过得到RGB每个通道的直方图来计算相似度
def classify_hist_with_split(image1, image2, size=(256, 256)):# 将图像resize后,分离为RGB三个通道,再计算每个通道的相似值image1 = cv2.resize(image1, size)image2 = cv2.resize(image2, size)plt.imshow(image1)plt.show()plt.axis('off')plt.imshow(image2)plt.show()plt.axis('off')sub_image1 = cv2.split(image1)sub_image2 = cv2.split(image2)sub_data = 0for im1, im2 in zip(sub_image1, sub_image2):sub_data += calculate(im1, im2)sub_data = sub_data / 3return sub_data# 计算单通道的直方图的相似值
def calculate(image1, image2):hist1 = cv2.calcHist([image1], [0], None, [256], [0.0, 255.0])hist2 = cv2.calcHist([image2], [0], None, [256], [0.0, 255.0])plt.plot(hist1, color="r")plt.plot(hist2, color="g")plt.show()# 计算直方图的重合度degree = 0for i in range(len(hist1)):if hist1[i] != hist2[i]:degree = degree + (1 - abs(hist1[i] - hist2[i]) / max(hist1[i], hist2[i]))else:degree = degree + 1degree = degree / len(hist1)return degree# Hash值对比
def cmpHash(hash1, hash2):n = 0# 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 nos.chdir(r'C:\Users\81244\Desktop\Python practice')
img1 = cv2.imread('./pic/image1.jpg')  #  11--- 16 ----13 ---- 0.43
img2 = cv2.imread('./pic/image2.jpg')hash1 = aHash(img1)
hash2 = aHash(img2)
n = cmpHash(hash1, hash2)
print('均值哈希算法相似度:', n)hash1 = dHash(img1)
hash2 = dHash(img2)
n = cmpHash(hash1, hash2)
print('差值哈希算法相似度:', n)hash1 = pHash(img1)
hash2 = pHash(img2)
n = cmpHash(hash1, hash2)
print('感知哈希算法相似度:', n)n = classify_hist_with_split(img1, img2)
print('三直方图算法相似度:', n)

 

二、视频分镜头

原理:对视频分帧后的所有相邻镜头进行比较,相似度过低的则判定为不同镜头并保存

使用均值哈希:

filelist=os.listdir(r'C:\Users\81244\Desktop\Python practice\pic')
img1=cv2.imread('./pic/image0.jpg')
cv2.imwrite('./shot/image0.jpg',img2)
for i in range(len(filelist)-1):img1=cv2.imread('./pic/image{}.jpg'.format(i))#print(type(img1))img2=cv2.imread('./pic/image{}.jpg'.format(i+1))hash1 = aHash(img1)hash2 = aHash(img2)n=cmpHash(hash1, hash2)print(n)if (n>25):cv2.imwrite('./shot/image{}.jpg'.format(i+1),img2)

结果:

使用直方图:

filelist=os.listdir(r'C:\Users\81244\Desktop\Python practice\pic')#image_save=r'C:\Users\81244\Desktop\Python practice\picsave'img1=cv2.imread('./pic/image0.jpg')
cv2.imwrite('./shot/image0.jpg',img1)
for i in range(len(filelist)-1):img1=cv2.imread('./pic/image{}.jpg'.format(i))#print(type(img1))img2=cv2.imread('./pic/image{}.jpg'.format(i+1))hash1 = aHash(img1)hash2 = aHash(img2)'''n=cmpHash(hash1, hash2)print(n)'''n = classify_hist_with_split(img1, img2)print('三直方图算法相似度:', n)if (n<0.6):cv2.imwrite('./shot/image{}.jpg'.format(i+1),img2)

结果:

视频图像处理——图像比较与分镜头相关推荐

  1. 视频图像处理仿真测试系统

    视频图像处理仿真测试系统 1.仿真测试系统框架 一个完善的仿真测试系统对于图像处理算法的设计至关重要.这个测试系统至少要完成以下功能: (1)模拟可配置的视频流(单帧的视频即为一幅图像). (2)模拟 ...

  2. 智能化场景识别,8个视频图像处理方案你值得拥有

    视频图像就是连续的静态图像的序列,是一种对客观事物更为形象,生动地描述.视频图像处理系统即基于图像处理算法对视频图像进行处理的系统.视频图像处理系统跟当代科学技术的发展是密不可分的.一个方面随着计算机 ...

  3. 基于FPGA视频图像处理系统设计

    摘   要 本报告给出一个基于FPGA+两片DDR2组成的核心板.带有4路视频输入和VGA接口的开发板进行的视频图像采集和处理系统的设计.使用TW2867进行视频输入信号的编码,存储到DDR2中,通过 ...

  4. 视频图像处理技术优势安防视频监控应用

    随着科技的发展和时代的不断进步,视频和图像数据处理技术已经逐渐成熟起来,对人们的生活和工作起着重要的作用.未来,视频监控与我们生活的联系将日益密切.毫无疑问,视频图像处理技术的研发是时下最大的安防热点 ...

  5. 浅谈安防监控中视频图像处理技术

    2019-08-15 21:39:20 随着计算机软件.硬件技术的日新月异的发展和普及,人类已经进入一个高速发展的信息化时代,人类大概有80%的信息来自图像,科学研究.技术应用中图像处理技术越来越成为 ...

  6. 基于海思Hi3531 ARM+K7 FPGA高性能综合视频图像处理平台

    板卡概述 XM703是自主研制的一款基于PCIE总线架构的高性能综合视频图像处理平台,该平台采用Xilinx的高性能Kintex UltraScale系列FPGA加上华为海思的高性能视频处理器来实现. ...

  7. 【PCIE703】XCKU060+海思视频处理器HI3531DV200-ARM的高性能综合视频图像处理平台设计资料及调试经验

    板卡概述 PCIE703是我司自主研制的一款基于PCIE总线架构的高性能综合视频图像处理平台,该平台采用Xilinx的高性能Kintex UltraScale系列FPGA加上华为海思的高性能视频处理器 ...

  8. System Verilog 视频缩放图像缩放 vivado 仿真

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_46621272/article/ ...

  9. 基于USB2.0的视频图像处理芯片实现方案

    摘 要:实时图像处理是图像处理领域的一个热点.给出了一种基于USB2.0 的视频图像处理芯片的实现方案,首先介绍了系统的整体设计框架,然后针对框架内核心模块阐述了相应的硬件实现原理,最后以Xilinx ...

最新文章

  1. Python3 reversed 函数
  2. py2数据分析_利用数据
  3. opencv copyto函数
  4. c++Hash Search哈希搜索的实现算法(附完整源码)
  5. Hadoop概念学习系列之谈谈RPC(三十三)
  6. 如何连接oracle 12c可插拔数据库
  7. server2012和2016提示wlanapi.dll丢失问题
  8. HTTP、SSL/TSL、HTTPS、TCP、UDP
  9. 关于通用配置管理模块的思考-续(用XmlDocument 还是DataSet)
  10. 卸载Docker CE
  11. Python基础:第25课——使用类和实例
  12. neo4j java json_如何将Neo4j JSON转换为Java Object
  13. STM32L476rg 低功耗模式关系梳理以及stm32duino Lowpower库的调用关系梳理
  14. 作为程序员面试官的3点建议
  15. [置顶]乔布斯的斯坦福演讲(双语)
  16. Unreal Engin_画廊制作笔记 _010给墙画添加灯光
  17. 利用二维数据学习纹理三维网格生成(CVPR 2020)
  18. 五类医学图像分类 深度学习
  19. OkHttp的GET请求的实现方式
  20. Android androidx下的fragment懒加载

热门文章

  1. 传统CMR磁盘与SMR瓦叠磁盘区别
  2. 【程序员日记】快乐的一周嘛(第6期)(财富、快乐、技术)
  3. 百度前端技术学院——DAY2
  4. word 2003 发送错误报告
  5. 关于采用LAS格式点云文件实现点云分类的一些看法
  6. 每日一练_127 计算器的改良
  7. 神奇的照片修复术,这才是 PS 的正确打开方式!
  8. 如何将服务器文件分享在局域网,局域网文件分发之windows7简单文件夹共享-局域网共享文件...
  9. 常用eclipse快捷键总结(后续会用增加)
  10. 前端培训ajax都有哪些优点和缺点