#pragma once #include #include #include #include #include #include #include #include #include namespace boost { namespace serialization { template void serialize(Archive & ar, std::array & a, const unsigned int /*version*/) { ar & make_array(a.data(), a.size()); } } // namespace serialization } // namespace boost struct rgb_wavelet_coefficients { // a double for (x, y) location represented in a single int using coefficient = std::pair; using pre_fingerprint = std::array, 3>; std::array reds; std::array greens; std::array blues; static pre_fingerprint pre_calculate(av::frame const & frame); static rgb_wavelet_coefficients calculate(av::frame const & frame); double distance_to(pre_fingerprint const & fingerprint) const; private: friend class boost::serialization::access; template void serialize(Archive & ar, const unsigned int /*version*/){ ar & reds; ar & greens; ar & blues; } }; std::ostream& operator<<(std::ostream& out, rgb_wavelet_coefficients const & x);