最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python 比較2張圖片的相似度的方法示例

 更新時(shí)間:2019年12月18日 11:20:00   作者:mse0520  
這篇文章主要介紹了python 比較2張圖片的相似度的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

本文介紹了python 比較2張圖片的相似度的方法示例,分享給大家,具體如下:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import cv2
import numpy as np
 
#均值哈希算法
def aHash(img):
  #縮放為8*8
  img=cv2.resize(img,(8,8),interpolation=cv2.INTER_CUBIC)
  #轉(zhuǎn)換為灰度圖
  gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
  #s為像素和初值為0,hash_str為hash值初值為''
  s=0
  hash_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*8
  img=cv2.resize(img,(9,8),interpolation=cv2.INTER_CUBIC)
  #轉(zhuǎn)換灰度圖
  gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
  hash_str=''
  #每行前一個(gè)像素大于后一個(gè)像素為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
 
#Hash值對(duì)比
def cmpHash(hash1,hash2):
  n=0
  #hash長(zhǎng)度不同則返回-1代表傳參出錯(cuò)
  if len(hash1)!=len(hash2):
    return -1
  #遍歷判斷
  for i in range(len(hash1)):
    #不相等則n計(jì)數(shù)+1,n最終為相似度
    if hash1[i]!=hash2[i]:
      n=n+1
  return n
 
img1=cv2.imread('A.png')
img2=cv2.imread('B.png')
hash1= aHash(img1)
hash2= aHash(img2)
print(hash1)
print(hash2)
n=cmpHash(hash1,hash2)
print '均值哈希算法相似度:'+ str(n)
 
hash1= dHash(img1)
hash2= dHash(img2)
print(hash1)
print(hash2)
n=cmpHash(hash1,hash2)
print '差值哈希算法相似度:'+ str(n)

講解

相似圖像搜索的哈希算法有三種:

  • 均值哈希算法
  • 差值哈希算法
  • 感知哈希算法
  • 均值哈希算法

步驟

縮放:圖片縮放為8*8,保留結(jié)構(gòu),出去細(xì)節(jié)。
灰度化:轉(zhuǎn)換為256階灰度圖。
求平均值:計(jì)算灰度圖所有像素的平均值。
比較:像素值大于平均值記作1,相反記作0,總共64位。
生成hash:將上述步驟生成的1和0按順序組合起來(lái)既是圖片的指紋(hash)。順序不固定。但是比較時(shí)候必須是相同的順序。
對(duì)比指紋:將兩幅圖的指紋對(duì)比,計(jì)算漢明距離,即兩個(gè)64位的hash值有多少位是不一樣的,不相同位數(shù)越少,圖片越相似。

代碼實(shí)現(xiàn): 

#均值哈希算法
def aHash(img):
  #縮放為8*8
  img=cv2.resize(img,(8,8),interpolation=cv2.INTER_CUBIC)
  #轉(zhuǎn)換為灰度圖
  gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
  #s為像素和初值為0,hash_str為hash值初值為''
  s=0
  hash_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有變化。

步驟
1. 縮放:圖片縮放為8*9,保留結(jié)構(gòu),出去細(xì)節(jié)。
2. 灰度化:轉(zhuǎn)換為256階灰度圖。
3. 求平均值:計(jì)算灰度圖所有像素的平均值。
4. 比較:像素值大于后一個(gè)像素值記作1,相反記作0。本行不與下一行對(duì)比,每行9個(gè)像素,八個(gè)差值,有8行,總共64位
5. 生成hash:將上述步驟生成的1和0按順序組合起來(lái)既是圖片的指紋(hash)。順序不固定。但是比較時(shí)候必須是相同的順序。
6. 對(duì)比指紋:將兩幅圖的指紋對(duì)比,計(jì)算漢明距離,即兩個(gè)64位的hash值有多少位是不一樣的,不相同位數(shù)越少,圖片越相似。

#差值感知算法
def dHash(img):
  #縮放8*8
  img=cv2.resize(img,(9,8),interpolation=cv2.INTER_CUBIC)
  #轉(zhuǎn)換灰度圖
  gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
  hash_str=''
  #每行前一個(gè)像素大于后一個(gè)像素為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

感知哈希算法

感知哈希算法可以參考
相似性︱python+opencv實(shí)現(xiàn)pHash算法+hamming距離(simhash)(三)
講的很詳細(xì)了。

Hash值對(duì)比

由于返回值為str字符串,所以直接遍歷字符串進(jìn)行比對(duì)。

#Hash值對(duì)比
def cmpHash(hash1,hash2):
  n=0
  #hash長(zhǎng)度不同則返回-1代表傳參出錯(cuò)
  if len(hash1)!=len(hash2):
    return -1
  #遍歷判斷
  for i in range(len(hash1)):
    #不相等則n計(jì)數(shù)+1,n最終為相似度
    if hash1[i]!=hash2[i]:
      n=n+1
  return n

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • django有外鍵關(guān)系的兩張表如何相互查找

    django有外鍵關(guān)系的兩張表如何相互查找

    這篇文章主要介紹了django有外鍵關(guān)系的兩張表如何相互查找,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Python獲取當(dāng)前公網(wǎng)ip并自動(dòng)斷開(kāi)寬帶連接實(shí)例代碼

    Python獲取當(dāng)前公網(wǎng)ip并自動(dòng)斷開(kāi)寬帶連接實(shí)例代碼

    這篇文章主要介紹了Python獲取當(dāng)前公網(wǎng)ip并自動(dòng)斷開(kāi)寬帶連接實(shí)例代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • 基于Python實(shí)現(xiàn)植物大戰(zhàn)僵尸游戲的示例代碼

    基于Python實(shí)現(xiàn)植物大戰(zhàn)僵尸游戲的示例代碼

    植物大戰(zhàn)僵尸是一款經(jīng)典的塔防類(lèi)游戲,玩家通過(guò)種植各種植物來(lái)抵御僵尸的攻擊,本文將詳細(xì)介紹如何使用Python和Pygame庫(kù)來(lái)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的植物大戰(zhàn)僵尸游戲,文中通過(guò)代碼示例講解的非常詳細(xì),感興趣的小伙伴跟著小編一起來(lái)看看吧
    2024-10-10
  • Python Flask自定義URL路由參數(shù)過(guò)濾器的方法詳解

    Python Flask自定義URL路由參數(shù)過(guò)濾器的方法詳解

    Flask是一個(gè)輕量級(jí)的Python Web應(yīng)用框架,它允許開(kāi)發(fā)者以一種簡(jiǎn)潔明了的方式來(lái)構(gòu)建Web應(yīng)用,Flask自定義URL的主要功能在于使得開(kāi)發(fā)者能夠通過(guò)簡(jiǎn)單的路由規(guī)則來(lái)自定義應(yīng)用程序的URL結(jié)構(gòu),本文給大家介紹了Python Flask自定義URL路由參數(shù)過(guò)濾器的方法,需要的朋友可以參考下
    2024-07-07
  • Pydantic和.env文件管理環(huán)境配置

    Pydantic和.env文件管理環(huán)境配置

    Pydantic 是一個(gè) Python 第三方包,本文主要介紹了Pydantic和.env文件管理環(huán)境配置,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-04-04
  • Flask搭建虛擬環(huán)境并運(yùn)行第一個(gè)flask程序

    Flask搭建虛擬環(huán)境并運(yùn)行第一個(gè)flask程序

    這篇文章主要介紹了Flask搭建虛擬環(huán)境并運(yùn)行第一個(gè)flask程序,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • OpenCV-Python實(shí)現(xiàn)通用形態(tài)學(xué)函數(shù)

    OpenCV-Python實(shí)現(xiàn)通用形態(tài)學(xué)函數(shù)

    本文將結(jié)合實(shí)例代碼,介紹OpenCV-Python實(shí)現(xiàn)通用形態(tài)學(xué)函數(shù),包含開(kāi)運(yùn)算,閉運(yùn)算等復(fù)雜的形態(tài)學(xué)運(yùn)算,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-06-06
  • Python用20行代碼實(shí)現(xiàn)完整郵件功能

    Python用20行代碼實(shí)現(xiàn)完整郵件功能

    這篇文章主要介紹了如何使用Python實(shí)現(xiàn)完整郵件功能的相關(guān)資料,需要的朋友可以參考下面文章內(nèi)容,希望能幫助到您
    2021-09-09
  • selenium鼠標(biāo)操作實(shí)戰(zhàn)案例詳解

    selenium鼠標(biāo)操作實(shí)戰(zhàn)案例詳解

    在實(shí)際場(chǎng)景中,會(huì)有單擊、長(zhǎng)時(shí)間單擊、雙擊、右鍵、拖拽等鼠標(biāo)操作,selenium提供了名為ActionChains的類(lèi)來(lái)處理這些操作,下面這篇文章主要給大家介紹了關(guān)于selenium鼠標(biāo)操作實(shí)戰(zhàn)案例的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • pandas之分組groupby()的使用整理與總結(jié)

    pandas之分組groupby()的使用整理與總結(jié)

    這篇文章主要介紹了pandas之分組groupby()的使用整理與總結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06

最新評(píng)論

门源| 乐东| 嘉定区| 朝阳市| 嵩明县| 神池县| 淮安市| 鹤山市| 麻江县| 淳化县| 布尔津县| 禹州市| 汉阴县| 积石山| 沽源县| 沁水县| 南宫市| 邯郸市| 镇安县| 宁明县| 孟津县| 洛阳市| 芮城县| 景泰县| 北流市| 丽江市| 尼玛县| 内乡县| 河源市| 富锦市| 崇仁县| 沂南县| 明溪县| 科技| 团风县| 阜宁县| 普兰县| 崇仁县| 定西市| 江都市| 龙里县|