An open API service indexing awesome lists of open source software.

https://github.com/simon987/fastimagehash

C/C++ replacement for the 'imagehash' python package
https://github.com/simon987/fastimagehash

fftw opencv perceptual-hashing wavelet-decomposition

Last synced: 7 months ago
JSON representation

C/C++ replacement for the 'imagehash' python package

Awesome Lists containing this project

README

          

## libfastimagehash

[![CodeFactor](https://www.codefactor.io/repository/github/simon987/fastimagehash/badge/master)](https://www.codefactor.io/repository/github/simon987/fastimagehash/overview/master)
[![GitHub license](https://img.shields.io/github/license/simon987/fastimagehash)](https://github.com/simon987/fastimagehash/blob/master/LICENSE)

*WIP: Not ready for production use!*

`libfastimagehash` is a [imagehash](https://github.com/JohannesBuchner/imagehash/)
replacement for C/C++.

**See also:**

* [go bindings](https://github.com/simon987/fastimagehash-go)
(with *cgo*).
* [imagehash-web](https://github.com/simon987/imagehash-web) (Javascript version)



*[\*See all benchmarks](bench/README.md)*

### Example usage

```C
#include

int main() {
unsigned char result[HASH_SIZE];

phash_file("image.jpeg", result, HASH_SIZE, HIGHFREQ_FACTOR);
}
```

### Build from source

```bash
# Download dependencies
apt install libopencv-dev libfftw3-dev cmake

# Checkout source
git clone --recursive https://github.com/simon987/fastimagehash

# Build
cmake .
make

# Install as a system library
sudo make install
```

**Built with**
* [opencv](https://github.com/opencv) for image decoding & resizing
* [wavelib](https://github.com/rafat/wavelib) for wavelet decomposition in `whash` (With [additional CFLAGS](https://github.com/simon987/wavelib/commit/8d05b0b7321271b05365d3e89bfb0fd5a26d68a6))
* [fftw3](http://fftw.org/) for DCT in `phash`
* [google/benchmark](https://github.com/google/benchmark) to measure performance

**Disclaimer**: The methods used to compute the image hashes
are identical to the `imagehash` python library, however, due to
some slight differences in the way OpenCV vs Pillow images are resized,
the final image hashes are not always exactly the same.