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;
                }
                }
            }