Il rilevatore di profili OpenCV 2 restituisce un vector<Point2i>
, ma a volte si desidera utilizzarli con una funzione che richiede uno vector<Point2f>
. Qual è il modo più veloce ed elegante per convertire?convertire il vettore OpenCV 2 <Point2i> nel vettore <Point2f>
Ecco alcune idee. Una funzione di conversione molto generale per tutto ciò che può essere convertito in un Mat
:
template <class SrcType, class DstType>
void convert1(std::vector<SrcType>& src, std::vector<DstType>& dst) {
cv::Mat srcMat = cv::Mat(src);
cv::Mat dstMat = cv::Mat(dst);
cv::Mat tmpMat;
srcMat.convertTo(tmpMat, dstMat.type());
dst = (vector<DstType>) tmpMat;
}
Ma questo utilizza un buffer in più, quindi non è l'ideale. Ecco un approccio che pre-assegna il vettore poi chiama copy()
:
template <class SrcType, class DstType>
void convert2(std::vector<SrcType>& src, std::vector<DstType>& dst) {
dst.resize(src.size());
std::copy(src.begin(), src.end(), dst.begin());
}
Infine, utilizzando un back_inserter
: src
template <class SrcType, class DstType>
void convert3(std::vector<SrcType>& src, std::vector<DstType>& dst) {
std::copy(src.begin(), src.end(), std::back_inserter(dst));
}
thx! per chiarire: cv :: Mat (src) .convertTo (dst, cv :: Mat (dst) .type()); – Flayn