OpenEV
Extending OpenCV to event-based vision
Loading...
Searching...
No Matches
sliding_window.hpp
Go to the documentation of this file.
1
6#ifndef OPENEV_CONTAINERS_SLIDING_WINDOW_HPP
7#define OPENEV_CONTAINERS_SLIDING_WINDOW_HPP
8
10#include "openev/core/types.hpp"
11#include <opencv2/core/types.hpp>
12#include <utility>
13
14namespace ev {
15constexpr bool USING_SLIDING_WINDOW_HPP = true;
16
33template <typename T>
34class SlidingWindow_ : public Deque_<T> {
35public:
40 explicit SlidingWindow_(const TimeType window = 0) : window_{window} {}
41
46 [[nodiscard]] inline TimeType window() const {
47 return window_;
48 }
49
54 inline void setWindow(const TimeType window) {
55 window_ = window;
56 trim();
57 }
58
63 inline void push(const Event_<T> &event) {
64 std::deque<Event_<T>>::push_back(event);
65 trim();
66 }
67
72 inline void push(Event_<T> &&event) {
73 std::deque<Event_<T>>::push_back(std::move(event));
74 trim();
75 }
76
80 template <typename... Args>
81 inline void emplace(Args &&...args) {
82 std::deque<Event_<T>>::emplace_back(std::forward<Args>(args)...);
83 trim();
84 }
85
86private:
87 inline void trim() {
88 if(Deque_<T>::empty()) {
89 return;
90 }
91 const auto newest = std::deque<Event_<T>>::back().t;
92 while(Deque_<T>::size() > 1 && (newest - Deque_<T>::front().t) > window_) {
93 Deque_<T>::pop_front();
94 }
95 }
96
97 TimeType window_{0};
98};
99
105} // namespace ev
106
107#endif // OPENEV_CONTAINERS_SLIDING_WINDOW_HPP
This class extends std::deque to implement event deques. For more information, please refer here.
Definition deque.hpp:23
This class extends cv::Point_<T> for event data. For more information, please refer here.
Definition types.hpp:77
FIFO event container that retains only events within a trailing time window.
Definition sliding_window.hpp:34
TimeType window() const
Definition sliding_window.hpp:46
void push(const Event_< T > &event)
Push an event to the back and discard front events older than the window.
Definition sliding_window.hpp:63
SlidingWindow_(const TimeType window=0)
Construct a sliding window with the given temporal span.
Definition sliding_window.hpp:40
void push(Event_< T > &&event)
Push an event (move) to the back and discard front events older than the window.
Definition sliding_window.hpp:72
void setWindow(const TimeType window)
Set a new time window length and immediately discard events outside the new window.
Definition sliding_window.hpp:54
void emplace(Args &&...args)
Construct an event in-place at the back and discard front events older than the window.
Definition sliding_window.hpp:81
Deque container for basic event structures.
SlidingWindowi SlidingWindow
Definition sliding_window.hpp:104
SlidingWindow_< float > SlidingWindowf
Definition sliding_window.hpp:102
SlidingWindow_< long > SlidingWindowl
Definition sliding_window.hpp:101
SlidingWindow_< double > SlidingWindowd
Definition sliding_window.hpp:103
SlidingWindow_< int > SlidingWindowi
Definition sliding_window.hpp:100
Basic event-based vision structures based on OpenCV components.