获取cv::Mat大小:

mymat.size()

获取cv::Mat指定位置的值:需指定数据类型,且注意数据类型应与存入时的数据类型一致,否则会导致不抛出异常的数据错误

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

 

 

 

欲将如下大小为1*17的cv::mat转为std::vector<cv::Point2d>

【opencv】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值改变了

【opencv】cv::Mat转std::vector<cv::Point2d> (注意两容器中数据类型的一致性)

后来发现原因是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_);

 

相关文章:

  • 2022-12-23
  • 2021-07-05
  • 2021-06-26
  • 2021-06-13
  • 2022-12-23
  • 2021-11-05
  • 2021-09-06
  • 2022-01-09
猜你喜欢
  • 2022-12-23
  • 2021-07-31
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-02-16
  • 2021-09-29
相关资源
相似解决方案