OpenEV
Extending OpenCV to event-based vision
 
Loading...
Searching...
No Matches
queue.hpp
Go to the documentation of this file.
1
6#ifndef OPENEV_CONTAINERS_QUEUE_HPP
7#define OPENEV_CONTAINERS_QUEUE_HPP
8
9#include "openev/containers/array.hpp"
10#include "openev/containers/vector.hpp"
11#include "openev/core/types.hpp"
12#include <cstddef>
13#include <opencv2/core/types.hpp>
14#include <queue>
15#include <utility>
16
17namespace ev {
19#ifndef OPENEV_ARRAY_HPP
20template <typename T, std::size_t N>
21class Array_;
22#endif
23
24#ifndef OPENEV_VECTOR_HPP
25template <typename T>
26class Vector_;
27#endif
29
35template <typename T>
36class Queue_ : public std::queue<Event_<T>> {
37 using std::queue<Event_<T>>::queue;
38
39public:
41 inline void push(const Event_<T> &e) {
42 std::queue<Event_<T>>::push(e);
43 }
45
50 template <std::size_t N>
51 inline void push(const Array_<T, N> &array) {
52 for(const Event_<T> &e : array) {
53 std::queue<Event_<T>>::emplace(std::move(e));
54 }
55 }
56
61 inline void push(const Vector_<T> &vector) {
62 for(const Event_<T> &e : vector) {
63 std::queue<Event_<T>>::emplace(std::move(e));
64 }
65 }
66
71 [[nodiscard]] inline double duration() const {
72 return std::queue<Event_<T>>::back().t - std::queue<Event_<T>>::front().t;
73 }
74
79 [[nodiscard]] inline double rate() const {
80 return std::queue<Event_<T>>::size() / duration();
81 }
82
87 [[nodiscard]] Eventd mean() {
88 const std::size_t n = std::queue<Event_<T>>::size();
89 double x{0};
90 double y{0};
91 double t{0};
92 double p{0};
93
94 while(!std::queue<Event_<T>>::empty()) {
95 const Event_<T> &e = std::queue<Event_<T>>::front();
96 x += e.x;
97 y += e.y;
98 t += e.t;
99 p += e.p;
100 std::queue<Event_<T>>::pop();
101 }
102
103 return {x / n, y / n, t / n, p / n > 0.5};
104 }
105
110 [[nodiscard]] inline cv::Point2d meanPoint() {
111 const std::size_t n = std::queue<Event_<T>>::size();
112 double x{0};
113 double y{0};
114
115 while(!std::queue<Event_<T>>::empty()) {
116 const Event_<T> &e = std::queue<Event_<T>>::front();
117 x += e.x;
118 y += e.y;
119 std::queue<Event_<T>>::pop();
120 }
121
122 return {x / n, y / n};
123 }
124
129 [[nodiscard]] inline double meanTime() {
130 const std::size_t n = std::queue<Event_<T>>::size();
131 double t{0};
132
133 while(!std::queue<Event_<T>>::empty()) {
134 t += std::queue<Event_<T>>::front().t;
135 std::queue<Event_<T>>::pop();
136 }
137
138 return t / n;
139 }
140
145 [[nodiscard]] inline double midTime() const {
146 return 0.5 * (std::queue<Event_<T>>::front().t + std::queue<Event_<T>>::back().t);
147 }
148};
153using Queue = Queuei;
154} // namespace ev
155
156#endif // OPENEV_CONTAINERS_QUEUE_HPP
This class extends std::array to implement event arrays. For more information, please refer here.
Definition array.hpp:22
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
This class extends std::queue to implement event queues. For more information, please refer here.
Definition queue.hpp:36
double rate() const
Compute event rate as the ratio between the number of events and the time difference between the last...
Definition queue.hpp:79
void push(const Array_< T, N > &array)
Push elements from an array of events.
Definition queue.hpp:51
cv::Point2d meanPoint()
Compute the mean x,y point of the events.
Definition queue.hpp:110
double meanTime()
Compute the mean time of the events.
Definition queue.hpp:129
void push(const Vector_< T > &vector)
Push elements from a vector of events.
Definition queue.hpp:61
Eventd mean()
Compute the mean of the events.
Definition queue.hpp:87
double midTime() const
Calculate the midpoint time between the oldest and the newest event.
Definition queue.hpp:145
double duration() const
Time difference between the last and the first event.
Definition queue.hpp:71
This class extends std::vector to implement event vectors. For more information, please refer here.
Definition vector.hpp:36
Queue_< float > Queuef
Definition queue.hpp:151
Queuei Queue
Definition queue.hpp:153
Queue_< double > Queued
Definition queue.hpp:152
Queue_< long > Queuel
Definition queue.hpp:150
Queue_< int > Queuei
Definition queue.hpp:149
Basic event-based vision structures based on OpenCV components.
Event_< double > Eventd
Definition types.hpp:243