#pragma once #include #include #include #include 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(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; };