OpenCV 2輪郭ファインダはvector<Point2i>
を返しますが、vector<Point2f>
を必要とする関数でこれらを使用したいことがあります。変換する最も速く、最もエレガントな方法は何ですか?OpenCV 2ベクトル<Point2i>をベクトルに変換<Point2f>
ここにいくつかのアイデアがあります。 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;
}
しかし、これは余分なバッファを使用していますので、それは理想的ではありません。
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());
}
を最後に、back_inserter
使用:ここでのアプローチは、ベクターが、その後copy()
呼び出す前に、割り当てていることだベクトルを
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!明確にする:cv :: Mat(src).convertTo(dst、cv :: Mat(dst).type()); – Flayn