8#include <nlohmann/json.hpp> 
    9#include <opencv2/core.hpp> 
   11NLOHMANN_JSON_NAMESPACE_BEGIN
 
   13template <
typename T, 
int Cn>
 
   14struct adl_serializer<cv::Vec<T, Cn>> {
 
   15    template <
class JsonT>
 
   17    static void to_json(JsonT& j, 
const cv::Vec<T, Cn>& v)
 
   19        for (
int i = 0; i < Cn; i++) {
 
   24    template <
class JsonT>
 
   26    static void from_json(
const JsonT& j, cv::Vec<T, Cn>& v)
 
   28        for (
int i = 0; i < Cn; i++) {
 
   29            v[i] = j.at(i).template get<T>();
 
   36struct adl_serializer<cv::Mat_<T>> {
 
   37    template <
class JsonT>
 
   39    static void to_json(JsonT& j, 
const cv::Mat_<T>& m)
 
   41        for (
int r = 0; r < m.rows; r++) {
 
   43            for (
int c = 0; c < m.cols; c++) {
 
   44                row.push_back(m(r, c));
 
   50    template <
class JsonT>
 
   52    static void from_json(
const JsonT& j, cv::Mat_<T>& m)
 
   55        auto cols = j[0].size();
 
   56        m = cv::Mat_<T>(rows, cols);
 
   57        for (
int r = 0; r < m.rows; r++) {
 
   58            for (
int c = 0; c < m.cols; c++) {
 
   66template <
typename T, 
int M, 
int N>
 
   67struct adl_serializer<cv::Matx<T, M, N>> {
 
   68    template <
class JsonT>
 
   70    static void to_json(JsonT& j, 
const cv::Matx<T, M, N>& mat)
 
   72        for (
int r = 0; r < M; r++) {
 
   74            for (
int c = 0; c < N; c++) {
 
   75                row.push_back(mat(r, c));
 
   81    template <
class JsonT>
 
   83    static void from_json(
const JsonT& j, cv::Matx<T, M, N>& mat)
 
   85        for (
int r = 0; r < M; r++) {
 
   86            for (
int c = 0; c < N; c++) {
 
   92NLOHMANN_JSON_NAMESPACE_END