我得到二維點向量的輸入,對它們進行變換,然后輸出二維點的變換向量。我的代碼需要快速運行,所以我想優化記憶體訪問時間,有沒有辦法在不復制資料的情況下將 rotate_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>());
我試圖在不復制資料的情況下執行代碼
uj5u.com熱心網友回復:
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介面存盤在向量中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/531072.html
標籤:C opencv
