我得到一个二维点向量的输入,对它们进行变换,然后输出变换后的二维点向量。我的代码需要快速运行,所以我想优化内存访问时间,有没有办法在不复制数据的情况下将rotated_points转换为向量?
std::vector<cv::Point2f> points =
std::vector<cv::Point2f>({{1, 0}, {0, 1}, {-1, 0}});
auto points_mat= cv::Mat(points);
auto rotation_matrix = cv::Matx22f({1, 2, 3, 4});
cv::Mat rotated_points;
cv::transform(points_mat, rotated_points, rotation_matrix);
std::vector<cv::Point2f> res_vec;
res_vec.assign(rotated_points.begin<cv::Point2f>(), rotated_points.end<cv::Point2f>());
我尝试执行代码而不复制数据
1条答案
按热度按时间uujelgoq1#
创建
vector
并将其作为参数传递给cv::Mat
示例,将copyData
标志设置为false(默认情况下为false cv::Mat ctor)。cv::Mat
将只引用矢量数据作为底层数据-cv::Mat
将共享传递的矢量数据。cv::transform
生成的所有结果将通过cv::Mat
接口存储在矢量中。