static inline void save(OutputArchive& ar, const ImageView& val) { const cv::Mat& m = val.getImage(); ar & make_nvp("rows", m.rows); ar & make_nvp("cols", m.cols); ar & make_nvp("channels", m.channels()); ar & make_nvp("type", m.type()); switch (m.type()) { case CV_32F: { auto start = m.ptr<float>(0); auto end = start + m.total(); ar & make_nvp("data", std::vector<float>(start, end)); break; } case CV_8U: default: { auto start = m.ptr<uint8_t>(0); auto end = start + m.elemSize() * m.total(); ar & make_nvp("data", std::vector<uint8_t>(start, end)); break; } } }