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
10#include <cstddef>
11#include <opencv2/core/types.hpp>
12#include <queue>
13
14namespace ev {
15constexpr bool USING_QUEUE_HPP = true;
16
22template <typename T>
23class Queue_ : public std::queue<Event_<T>> {
24 using std::queue<Event_<T>>::queue;
25 using ResultType = TimeType;
26
27public:
32 [[nodiscard]] inline ResultType duration() const {
33 return std::queue<ev::Event_<T>>::back().t - std::queue<ev::Event_<T>>::front().t;
34 }
35
40 [[nodiscard]] inline ResultType rate() const {
41 return std::queue<ev::Event_<T>>::size() / duration();
42 }
43
49 [[nodiscard]] inline Event_<ResultType> mean() {
50 const std::size_t n = std::queue<ev::Event_<T>>::size();
51 ResultType x{0};
52 ResultType y{0};
53 ResultType t{0};
54 ResultType p{0};
55
56 while(!std::queue<ev::Event_<T>>::empty()) {
57 const Event_<T> &e = std::queue<ev::Event_<T>>::front();
58 x += e.x;
59 y += e.y;
60 t += e.t;
61 p += e.p;
62 std::queue<ev::Event_<T>>::pop();
63 }
64
65 return {x / n, y / n, t / n, p / n > 0.5};
66 }
67
73 [[nodiscard]] inline cv::Point_<ResultType> meanPoint() {
74 const std::size_t n = std::queue<ev::Event_<T>>::size();
75 ResultType x{0};
76 ResultType y{0};
77
78 while(!std::queue<ev::Event_<T>>::empty()) {
79 const Event_<T> &e = std::queue<ev::Event_<T>>::front();
80 x += e.x;
81 y += e.y;
82 std::queue<ev::Event_<T>>::pop();
83 }
84
85 return {x / n, y / n};
86 }
87
93 [[nodiscard]] inline ResultType meanTime() {
94 const std::size_t n = std::queue<ev::Event_<T>>::size();
95 ResultType t{0};
96
97 while(!std::queue<ev::Event_<T>>::empty()) {
98 t += std::queue<ev::Event_<T>>::front().t;
99 std::queue<ev::Event_<T>>::pop();
100 }
101
102 return t / n;
103 }
104
109 [[nodiscard]] inline ResultType midTime() const {
110 return 0.5 * (std::queue<ev::Event_<T>>::front().t + std::queue<ev::Event_<T>>::back().t);
111 }
112};
117using Queue = Queuei;
118} // namespace ev
119
120#endif // OPENEV_CONTAINERS_QUEUE_HPP
This class extends cv::Point_<T> for event data. For more information, please refer here.
Definition types.hpp:77
PolarityType p
Definition types.hpp:80
TimeType t
Definition types.hpp:79
This class extends std::queue to implement event queues. For more information, please refer here.
Definition queue.hpp:23
ResultType duration() const
Time difference between the last and the first event.
Definition queue.hpp:32
Event_< ResultType > mean()
Compute the mean of the events.
Definition queue.hpp:49
ResultType midTime() const
Calculate the midpoint time between the oldest and the newest event.
Definition queue.hpp:109
ResultType meanTime()
Compute the mean time of the events.
Definition queue.hpp:93
ResultType rate() const
Compute event rate as the ratio between the number of events and the time difference between the last...
Definition queue.hpp:40
cv::Point_< ResultType > meanPoint()
Compute the mean x,y point of the events.
Definition queue.hpp:73
Queue_< float > Queuef
Definition queue.hpp:115
Queuei Queue
Definition queue.hpp:117
Queue_< double > Queued
Definition queue.hpp:116
Queue_< long > Queuel
Definition queue.hpp:114
Queue_< int > Queuei
Definition queue.hpp:113
Basic event-based vision structures based on OpenCV components.