【opencv】cv::Mat轉std::vector (注意兩容器中數據類型的一致性)


獲取cv::Mat大小:

mymat.size()

獲取cv::Mat指定位置的值:需指定數據類型,且注意數據類型應與存入時的數據類型一致,否則會導致不拋出異常的數據錯誤

mymat.at<float>(0,i);

 

 

 

欲將如下大小為1*17的cv::mat轉為std::vector<cv::Point2d>

 

使用如下的代碼:

std::vector<cv::Point2d> transform_mat_to_vector2d(cv::Mat src){
    std::vector<cv::Point2d> dst;
    for(int i=0;i<17;i++){
        cv::Point2d p;
        p.x=src.at<float>(0,i);
        p.y=src.at<float>(1,i);
        dst.push_back(p);
    }
    return dst;
}

 

 

發現得到的vector值改變了

后來發現原因是cv::Mat中的元素類型為double(如下),以float格式讀出則會出錯

cv::Mat rep_pt2d_;

cv::projectPoints(p_cam_3d17,cam_r,cam_t,camInstris,camDistort,rep_pt2d_);

std::vector<cv::Point2d> rep_p_2d17=transform_mat_to_vector2d(rep_pt2d_);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM