| 1234567891011121314151617181920212223242526272829 |
- #pragma once
- #include <cstdint>
- #include <opencv2/opencv.hpp>
- #include <string>
- #include <vector>
- class ImageHasher {
- public:
- // dHash(隣接ピクセルの輝度差分によるハッシュ)を計算する
- // 戻り値: 64ビット整数値のハッシュ
- static uint64_t calculateDHash(const cv::Mat &image);
- // pHash(DCT: 離散コサイン変換を用いた周波数特徴ハッシュ)を計算する
- // 戻り値: 64ビット整数値のハッシュ
- static uint64_t calculatePHash(const cv::Mat &image);
- // 2つのハッシュ値間のハミング距離(異なるビットの数)を計算する
- static inline int hammingDistance(uint64_t h1, uint64_t h2) {
- return static_cast<int>(std::popcount(h1 ^ h2));
- };
- // 大容量画像を高速に読み込むためのヘルパー関数
- // targetSize: 縮小後の目安となる最大サイズ
- static cv::Mat loadImage(const std::string &path, int targetSize = 512);
- private:
- static constexpr int DHASH_SIZE = 8;
- static constexpr int PHASH_SIZE = 32;
- };
|