ImageHasher.hpp 1.0 KB

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