从Python使用OpenCV的图像哈希模块

and*_*and 4 python opencv phash

我想从Python 使用OpenCV的感知哈希函数

这不起作用。

import cv2
a_1 = cv2.imread('a.jpg')
cv2.img_hash_BlockMeanHash.compute(a_1)
Run Code Online (Sandbox Code Playgroud)

我得到:

TypeError: descriptor 'compute' requires a 'cv2.img_hash_ImgHashBase' object but received a 'numpy.ndarray'
Run Code Online (Sandbox Code Playgroud)

而且这也失败了

a_1_base = cv2.img_hash_ImgHashBase(a_1) 
cv2.img_hash_BlockMeanHash.compute(a_1_base)
Run Code Online (Sandbox Code Playgroud)

我得到:

TypeError: Incorrect type of self (must be 'img_hash_ImgHashBase' or its derivative)
Run Code Online (Sandbox Code Playgroud)

Colab笔记本显示以下内容:

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

A. *_*hev 6

在这里我向您展示如何使用 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
Run Code Online (Sandbox Code Playgroud)

您需要安装并导入 cv2 才能正常工作。


Sta*_*tav 5

OpenCV python接口与C ++接口之间存在一个常见的兼容性差距(即,类之间不会以相同的方式相互继承)。有*_create()静态功能。

因此,您应该使用:

hsh = cv2.img_hash.BlockMeanHash_create()
hsh.compute(a_1)
Run Code Online (Sandbox Code Playgroud)

在协作笔记本的副本中:https ://colab.research.google.com/drive/1CLJNPPbeO3CiQ2d8JgPxEINpr2oNMWPh#scrollTo=OdTtUegmPnf2

  • 它返回一个数组,如何获取一个数字? (2认同)

小智 5

pip install opencv-python
pip install opencv-contrib-python    #img_hash in this one 
Run Code Online (Sandbox Code Playgroud)

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