Skip to content

File opencv_data_types.hpp

File List > data_format > opencv_data_types.hpp

Go to the documentation of this file

#pragma once

#include "illixr/switchboard.hpp"

#include 
#include 
#include 
#include 

namespace ILLIXR::data_format {
namespace image {
    enum image_type { LEFT_EYE, RIGHT_EYE, RGB, DEPTH, LEFT_EYE_PROCESSED, RIGHT_EYE_PROCESSED, RGB_PROCESSED, CONFIDENCE };

    const std::map<image_type, const std::string> image_type_map = {{LEFT_EYE, "LEFT_EYE"},
                                                                    {RIGHT_EYE, "RIGHT_EYE"},
                                                                    {RGB, "RGB"},
                                                                    {DEPTH, "DEPTH"},
                                                                    {LEFT_EYE_PROCESSED, "LEFT_EYE_PROCESSED"},
                                                                    {RIGHT_EYE_PROCESSED, "RIGHT_EYE_PROCESSED"},
                                                                    {RGB_PROCESSED, "RGB_PROCESSED"},
                                                                    {CONFIDENCE, "CONFIDENCE"}};
} // namespace image

namespace camera {
    enum cam_type { BINOCULAR, MONOCULAR, RGB_DEPTH, DEPTH, ZED };
}

struct cam_base_type : switchboard::event {
    time_point                           time;     
    camera::cam_type                     type;     
    std::map<image::image_type, cv::Mat> images{}; 

    cam_base_type(time_point _time, std::map<image::image_type, cv::Mat> imgs, camera::cam_type _type)
        : time(_time)
        , type(_type)
        , images{std::move(imgs)} { }

    cv::Mat& operator[](image::image_type idx) {
        return images.at(idx);
    }

    int format(image::image_type idx) {
        return images.at(idx).type();
    }

    [[nodiscard]] size_t size() const {
        return images.size();
    }

    [[nodiscard]] cv::Mat at(const image::image_type idx) const {
        return images.at(idx);
    }

    [[nodiscard]] std::map<image::image_type, cv::Mat>::const_iterator find(const image::image_type idx) const {
        return images.find(idx);
    }

    [[nodiscard]] std::map<image::image_type, cv::Mat>::const_iterator begin() const {
        return images.begin();
    }

    [[nodiscard]] std::map<image::image_type, cv::Mat>::const_iterator end() const {
        return images.end();
    }
};

struct [[maybe_unused]] binocular_cam_type : cam_base_type {
    [[maybe_unused]] binocular_cam_type(time_point _time, cv::Mat _img0, cv::Mat _img1)
        : cam_base_type(_time, {{image::LEFT_EYE, _img0}, {image::RIGHT_EYE, _img1}}, camera::BINOCULAR) { }
};

struct [[maybe_unused]] monocular_cam_type : cam_base_type {
    [[maybe_unused]] monocular_cam_type(time_point _time, cv::Mat _img)
        : cam_base_type(_time, {{image::RGB, _img}}, camera::MONOCULAR) { }

    [[nodiscard]] cv::Mat img() const {
        return images.at(image::RGB);
    }
};

struct [[maybe_unused]] rgb_depth_type : cam_base_type {
    [[maybe_unused]] rgb_depth_type(time_point _time, cv::Mat _rgb, cv::Mat _depth)
        : cam_base_type(_time, {{image::RGB, _rgb}, {image::DEPTH, _depth}}, camera::RGB_DEPTH) { }
};

struct [[maybe_unused]] depth_type : cam_base_type {
    [[maybe_unused]] depth_type(time_point _time, cv::Mat _depth)
        : cam_base_type(_time, {{image::DEPTH, _depth}}, camera::DEPTH) { }
};
} // namespace ILLIXR::data_format