【opencv】cv::Mat转std::vector<cv::Point2d> (注意两容器中数据类型的一致性)
2018-11-26 20:20 ZealouSnesS 阅读(5248) 评论(0) 收藏 举报获取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_);
浙公网安备 33010602011771号