日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

使用Python,OpenCV进行图像哈希

發布時間:2023/11/27 生活经验 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Python,OpenCV进行图像哈希 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用Python,OpenCV進行圖像哈希

    • 1. 效果圖
    • 2. 原理
    • 3. 源代碼
    • 參考

這篇博客將介紹圖像哈希,感知哈希以及這些算法如何用于(快速)確定圖像的視覺內容是否相同或相似。并實現了差異散列,一個常見的感知散列算法(1)非???#xff0c;而(2)非常準確。以此來判斷圖片是否發生變化。

1. 效果圖

2. 原理

圖像哈希或者感知哈希的步驟是: 基于圖像的內容,構建唯一標識輸入圖像的散列值。
通過利用圖像散列算法,可以在恒定的時間內或最差,O(Log n)時間找到近似相同的圖像。

  • 為什么傳統哈希不起作用

    傳統的md5、sha等密碼散列算法的本質:更改文件中的單個位會導致不同的哈希。 實質上圖像哈希希望只有單個像素變化的,認為圖像沒有變化,或者圖像縮放也認為沒有變化;

  • 差異哈希(DHASH)的好處:
    1)輸入圖像的寬高比更改(由于忽略了縱橫比),圖像哈希不會改變;
    2)調整亮度或對比度(1)不會改變哈希值或(2)只會稍微改變它,確保散列將靠近;
    3)差異散列非??烨覝蚀_;

  • 通常使用 漢明距離 來比較哈希值。兩個漢明距離很小的哈希意味著兩個散列是相同的,并且兩個圖像也是相同的/感知相似的。

3. 源代碼

# USAGE
# python hash.py --images images# 導入必要的包
from imutils import paths
import argparse
import time
import sys
import cv2# 設置圖像散列為8,表示構建8*8=64位哈希值
def dhash(image, hashSize=8):# 縮放輸入圖像,增加一列以計算水平梯度差值resized = cv2.resize(image, (hashSize + 1, hashSize))# 計算相鄰水平梯度列像素差值diff = resized[:, 1:] > resized[:, :-1]# 轉換圖像差異為hashreturn sum([2 ** i for (i, v) in enumerate(diff.flatten()) if v])# 構建命令行參數及解析
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--images", required=True,help="dataset of images to search through (i.e., the haytack)")
args = vars(ap.parse_args())# 獲取hastach、needle文件圖片
print("[INFO] computing hashes for images...")
hashmapsPaths = list(paths.list_images(args["images"]))# 移除文件名中的\
if sys.platform != "win32":hashmapsPaths = [p.replace("\\", "") for p in hashmapsPaths]# 初始化存放圖像名及其hash值的map,并計時
hashmaps = {}
start = time.time()# 遍歷hashmaps路徑
for p in hashmapsPaths:# 從磁盤加載圖像image = cv2.imread(p)# 如果圖像為None,則跳過if image is None:continue# 轉換圖像為灰度圖,并計算圖像hash值image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)imageHash = dhash(image)# 更新hashmaps字典l = hashmaps.get(imageHash, [])l.append(p)hashmaps[imageHash] = l# 展示hash耗時及hashmaps照片數,開始計算needles文件夾的圖像hash值
print("[INFO] processed {} images in {:.2f} seconds".format(len(hashmaps), time.time() - start))
print("[INFO] computing hashes for needles...")for k,v in hashmaps.items():print("[INFO] {}: {}".format(k,v))

參考

  • https://www.pyimagesearch.com/2017/11/27/image-hashing-opencv-python/

總結

以上是生活随笔為你收集整理的使用Python,OpenCV进行图像哈希的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。