簡體   English   中英

從 Python 使用 OpenCV 的圖像哈希模塊

[英]Using OpenCV's Image Hashing Module from Python

我想使用 Python 中的 OpenCV感知哈希函數

這是行不通的。

import cv2
a_1 = cv2.imread('a.jpg')
cv2.img_hash_BlockMeanHash.compute(a_1)

我得到:

TypeError: descriptor 'compute' requires a 'cv2.img_hash_ImgHashBase' object but received a 'numpy.ndarray'

這也失敗了

a_1_base = cv2.img_hash_ImgHashBase(a_1) 
cv2.img_hash_BlockMeanHash.compute(a_1_base)

我得到:

TypeError: Incorrect type of self (must be 'img_hash_ImgHashBase' or its derivative)

Colab 筆記本顯示:

https://colab.research.google.com/drive/1x5ZxMBD3wFts2WKS4ip3rp4afDx0lGhi

這是 OpenCV python 接口與 C++ 接口之間的常見兼容性差距(即類不會以相同的方式相互繼承)。 *_create()靜態函數。

所以你應該使用:

hsh = cv2.img_hash.BlockMeanHash_create()
hsh.compute(a_1)

在您的協作筆記本的副本中: https ://colab.research.google.com/drive/1CLJNPPbeO3CiQ2d8JgPxEINpr2oNMWPh#scrollTo=OdTtUegmPnf2

pip install opencv-python
pip install opencv-contrib-python    #img_hash in this one 

( https://pypi.org/project/opencv-python/ )

在這里,我將向您展示如何使用 OpenCV 計算 64 位 pHash。 我定義了一個函數,它從傳入的顏色 BGR cv2 圖像返回無符號的 64 位整數 pHash:

import cv2
    
def pHash(cv_image):
        imgg = cv2.cvtColor(cv_image, cv2.COLOR_BGR2GRAY);
        h=cv2.img_hash.pHash(imgg) # 8-byte hash
        pH=int.from_bytes(h.tobytes(), byteorder='big', signed=False)
        return pH

您需要安裝並導入 cv2 才能正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM