OpenEV
Extending OpenCV to event-based vision
 
Loading...
Searching...
No Matches
array.hpp
1
6#ifndef OPENEV_CONTAINERS_ARRAY_HPP
7#define OPENEV_CONTAINERS_ARRAY_HPP
8
10#include <array>
11#include <cstddef>
12#include <numeric>
13#include <opencv2/core/types.hpp>
14
15namespace ev {
21template <typename T, std::size_t N>
22class Array_ : public std::array<Event_<T>, N> {
23 using std::array<Event_<T>, N>::array;
24
25public:
30 [[nodiscard]] inline double duration() const {
31 return std::array<Event_<T>, N>::back().t - std::array<Event_<T>, N>::front().t;
32 }
33
38 [[nodiscard]] inline double rate() const {
39 return std::array<Event_<T>, N>::size() / duration();
40 }
41
46 [[nodiscard]] Eventd mean() const {
47 const double x = std::accumulate(std::array<Event_<T>, N>::begin(), std::array<Event_<T>, N>::end(), 0.0, [](double sum, const Event_<T> &e) { return sum + e.x; }) / N;
48 const double y = std::accumulate(std::array<Event_<T>, N>::begin(), std::array<Event_<T>, N>::end(), 0.0, [](double sum, const Event_<T> &e) { return sum + e.y; }) / N;
49 const double t = std::accumulate(std::array<Event_<T>, N>::begin(), std::array<Event_<T>, N>::end(), 0.0, [](double sum, const Event_<T> &e) { return sum + e.t; }) / N;
50 const double p = std::accumulate(std::array<Event_<T>, N>::begin(), std::array<Event_<T>, N>::end(), 0.0, [](double sum, const Event_<T> &e) { return sum + e.p; }) / N;
51 return {x, y, t, p > 0.5};
52 }
53
58 [[nodiscard]] inline cv::Point2d meanPoint() const {
59 const double x = std::accumulate(std::array<Event_<T>, N>::begin(), std::array<Event_<T>, N>::end(), 0.0, [](double sum, const Event_<T> &e) { return sum + e.x; }) / N;
60 const double y = std::accumulate(std::array<Event_<T>, N>::begin(), std::array<Event_<T>, N>::end(), 0.0, [](double sum, const Event_<T> &e) { return sum + e.y; }) / N;
61 return {x, y};
62 }
63
68 [[nodiscard]] inline double meanTime() const {
69 return std::accumulate(std::array<Event_<T>, N>::begin(), std::array<Event_<T>, N>::end(), 0.0, [](double sum, const Event_<T> &e) { return sum + e.t; }) / N;
70 }
71
76 [[nodiscard]] inline double midTime() const {
77 return 0.5 * (std::array<Event_<T>, N>::front().t + std::array<Event_<T>, N>::back().t);
78 }
79};
80template <std::size_t N>
81using Arrayi = Array_<int, N>;
82template <std::size_t N>
83using Arrayl = Array_<long, N>;
84template <std::size_t N>
85using Arrayf = Array_<float, N>;
86template <std::size_t N>
87using Arrayd = Array_<double, N>;
88template <std::size_t N>
89using Array = Arrayi<N>;
90} // namespace ev
91
92#endif // OPENEV_CONTAINERS_ARRAY_HPP
This class extends std::array to implement event arrays. For more information, please refer here.
Definition array.hpp:22
Eventd mean() const
Definition array.hpp:46
double duration() const
Definition array.hpp:30
cv::Point2d meanPoint() const
Definition array.hpp:58
double midTime() const
Definition array.hpp:76
double meanTime() const
Definition array.hpp:68
double rate() const
Definition array.hpp:38
This class extends cv::Point_<T> for event data. For more information, please refer here.
Definition types.hpp:62
bool p
Definition types.hpp:65
double t
Definition types.hpp:64
Basic event-based vision structures based on OpenCV components.
Event_< double > Eventd
Definition types.hpp:243