#include "Utility/misc.h" #include <QPoint> // QPoint #include <QString> #include <QStringList> #include <QCoreApplication> int BioTrackerUtilsMisc::split(std::string& txt, std::vector<std::string>& strs, char ch) { std::string::size_type pos = txt.find(ch); std::string::size_type initialPos = 0; strs.clear(); // Decompose statement while (pos != std::string::npos) { strs.push_back(txt.substr(initialPos, pos - initialPos)); initialPos = pos + 1; pos = txt.find(ch, initialPos); } // Add the last one strs.push_back( txt.substr(initialPos, std::min(pos, txt.size()) - initialPos + 1)); return strs.size(); } std::string BioTrackerUtilsMisc::getTimeAndDate(std::string prefix, std::string suffix) { // time_t timetitle; // std::string timeInfo = prefix; // time(&timetitle); // std::string t = ctime(&timetitle); // for (int i = 0; i < t.size(); i++) // if (t[i] == ' ' || t[i] == ':') // t[i] = '_'; // timeInfo += t.substr(0, t.size() - 1); // timeInfo += suffix; // return timeInfo; time_t rawtime; struct tm* timeinfo; time(&rawtime); timeinfo = localtime(&rawtime); char t[30]; strftime(t, 30, "%Y-%m-%dT%H_%M_%S", timeinfo); // std::string out = prefix; std::string timeStampF(t); out += timeStampF; out += "_"; out += std::to_string(QCoreApplication::applicationPid()); out += suffix; return out; } std::vector<cv::Point> BioTrackerUtilsMisc::stringToCVPointVec( std::string arena) { std::vector<cv::Point> pts; QString qarena(arena.c_str()); QStringList corners = qarena.split(";"); for (int i = 0; i < corners.size(); i++) { QString cur = corners.at(i); QStringList p = cur.split(","); pts.push_back(cv::Point(p.at(0).toInt(), p.at(1).toInt())); } return pts; } std::vector<cv::Point> BioTrackerUtilsMisc::QVecToCvVec(std::vector<QPoint> q) { std::vector<cv::Point> v; for (int i = 0; i < q.size(); i++) v.push_back(cv::Point(q[i].x(), q[i].y())); return v; } std::vector<QPoint> BioTrackerUtilsMisc::CvVecToQVec(std::vector<cv::Point> q) { std::vector<QPoint> v; for (int i = 0; i < q.size(); i++) v.push_back(QPoint(q[i].x, q[i].y)); return v; } std::string BioTrackerUtilsMisc::cvPointsToString(std::vector<cv::Point> ac) { std::string arena = ""; for (int i = 0; i < ac.size(); i++) arena += (std::to_string(ac[i].x) + "," + std::to_string(ac[i].y) + ";"); return arena.substr(0, arena.size() - 1); }