#python #opencv #phash
#python #opencv #phash
Вопрос:
Я хочу использовать функции хеширования восприятия OpenCV из Python.
Это не работает.
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
Комментарии:
1. Взгляните на это: pyimagesearch.com/2017/11/27/image-hashing-opencv-python
Ответ №1:
Это общий пробел в совместимости интерфейса OpenCV python с интерфейсом C (т. Е. Классы не наследуются друг от друга одинаково). Для этого есть *_create()
статические функции.
Поэтому вам следует использовать:
hsh = cv2.img_hash.BlockMeanHash_create()
hsh.compute(a_1)
В копии вашей записной книжки collab:
https://colab.research.google.com/drive/1CLJNPPbeO3CiQ2d8JgPxEINpr2oNMWPh#scrollTo=OdTtUegmPnf2
Комментарии:
1. он возвращает массив, как получить одно число?
2. hash_xor = уменьшить (лямбда x, y: x ^ y, хэш [0])?
3. Это дает мне следующую ошибку:
AttributeError: module 'cv2.cv2' has no attribute 'img_hash'
. Мояopencv-python
иopencv-contrib-python
версия 4.3.04. Удаление
opencv-python
и переустановка его, решили проблему!
Ответ №2:
pip install opencv-python
pip install opencv-contrib-python #img_hash in this one
Ответ №3:
Здесь я покажу вам, как вычислить 64-битный pHash с помощью OpenCV. Я определил функцию, которая возвращает 64-разрядный целочисленный pHash без знака из переданного цветного изображения BGR cv2:
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.
Комментарии:
1. Есть ли способ сгенерировать хэш размером более 8 байт? например, 16-байтовый.