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;
}
但這採用了額外的緩衝,所以它的效果並不理想。這裏有一個方法是預先分配,則調用矢量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());
}
最後,使用back_inserter
:
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