25 #ifndef INCLUDED_LoadRows_h_GUID_7FC43F97_8922_448D_7CE8_2D9EAB669BBD 26 #define INCLUDED_LoadRows_h_GUID_7FC43F97_8922_448D_7CE8_2D9EAB669BBD 40 #include <Eigen/Geometry> 41 #include <opencv2/core/core.hpp> 55 static const cv::Size IMAGE_SIZE = {640, 480};
57 inline cv::Mat
const &getGray() {
58 static const cv::Mat instance = cv::Mat(IMAGE_SIZE, CV_8UC1);
62 inline cv::Mat
const &getColor() {
63 static const cv::Mat instance = cv::Mat(IMAGE_SIZE, CV_8UC3);
71 : helper_(helper), row_(row) {}
73 if (!measurementPieces_.empty()) {
74 std::cerr <<
"Leftover measurement pieces on loadrow " 75 "destruction, suggests a parsing error!" 79 bool operator()(std::string
const &line, std::size_t beginPos,
81 auto advanceFieldAfterProcessing =
util::finally([&] { field_++; });
89 std::tie(success, val) = helper_.getFieldAs<
double>(strField);
93 row_.xlate[field_] = val;
100 std::tie(success, val) = helper_.getFieldAs<
double>(strField);
122 auto success = helper_.getField(strField, row_.tv.seconds);
127 auto success = helper_.getField(strField, row_.tv.microseconds);
135 bool success =
false;
137 std::tie(success, val) = helper_.getFieldAs<
float>(strField);
141 measurementPieces_.push_back(val);
142 if (measurementPieces_.size() == 3) {
144 row_.measurements.emplace_back(
145 measurementPieces_[0], measurementPieces_[1],
146 measurementPieces_[2], IMAGE_SIZE);
147 measurementPieces_.clear();
155 std::size_t field_ = 0;
156 std::vector<float> measurementPieces_;
159 inline MeasurementsRows
loadData(std::string
const &fn) {
160 MeasurementsRows ret;
161 std::ifstream csvFile(fn);
163 std::cerr <<
"Could not open csvFile " << fn << std::endl;
167 auto headerRow = csvtools::getCleanLine(csvFile);
168 if (headerRow.empty() || !csvFile) {
171 std::cerr <<
"Header row was empty, that's not a good sign!" 178 std::string dataLine = csvtools::getCleanLine(csvFile);
181 csvtools::iterateFields(
LoadRow(helper, *newRow), dataLine);
185 std::cout <<
"Row has " << newRow->measurements.size()
186 <<
" blobs" << std::endl;
188 ret.emplace_back(std::move(newRow));
190 std::cerr <<
"Something went wrong parsing that row: " 191 << dataLine << std::endl;
194 dataLine = csvtools::getCleanLine(csvFile);
196 std::cout <<
"Total of " << ret.size() <<
" rows" << std::endl;
205 ret->ledMeasurements = row.measurements;
206 ret->camParams = camParams;
207 ret->frame = getColor();
208 ret->frameGray = getGray();
215 #endif // INCLUDED_LoadRows_h_GUID_7FC43F97_8922_448D_7CE8_2D9EAB669BBD Definition: UtilityFunctions.h:48
Header declaring a C++11 finally or "scope-guard" construct.
The main namespace for all C++ elements of the framework, internal and external.
Definition: namespace_osvr.dox:3
MeasurementsRows loadData(std::string const &fn)
Definition: LoadRows.h:159
Scalar y() const
Definition: Quaternion.h:71
Definition: CameraParameters.h:41
Definition: LoadRows.h:67
Scalar x() const
Definition: Quaternion.h:69
Definition: ImageProcessing.h:41
Scalar w() const
Definition: Quaternion.h:75
Header providing a C++ wrapper around TimeValueC.h.
FinalTask< F > finally(F &&f)
Creation free function for final tasks to run on scope exit.
Definition: Finally.h:87
Scalar z() const
Definition: Quaternion.h:73