opencv 从< Point2f>cv::Mat获取向量

tpgth1q7  于 2022-11-15  发布在  其他
关注(0)|答案(1)|浏览(285)

我得到一个二维点向量的输入,对它们进行变换,然后输出变换后的二维点向量。我的代码需要快速运行,所以我想优化内存访问时间,有没有办法在不复制数据的情况下将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>());

我尝试执行代码而不复制数据

uujelgoq

uujelgoq1#

std::vector<cv::Point2f> res_vec(points.size());
cv::Mat rotated_points(res_vec);
cv::transform(points_mat, rotated_points, rotation_matrix);

创建vector并将其作为参数传递给cv::Mat示例,将copyData标志设置为false(默认情况下为false cv::Mat ctor)。cv::Mat将只引用矢量数据作为底层数据-cv::Mat将共享传递的矢量数据。cv::transform生成的所有结果将通过cv::Mat接口存储在矢量中。

相关问题