KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
The OpenCV 2 contour finder returns a vector<Point2i> , but sometimes you want to use these with a function that requires a vector<Point2f> . What is the fastest, most elegant way to convert? Here are some ideas. A very general conversion function for anything that can be converted to a 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; } But this uses an extra buffer, so it's not ideal. Here's an approach that pre-allocates the vector then calls 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()); } Finally, using a 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)); }
Tags (comma-separated)
Save Edits
Cancel