zoukankan      html  css  js  c++  java
  • 【opencv】cv::Mat转std::vector<cv::Point2d> (注意两容器中数据类型的一致性)

    获取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_);
  • 相关阅读:
    highcharts
    iCheck
    MdiContainer
    wms-ssv数据字典
    hibernate 返回自定义对象
    XmlSerialize
    Db
    python groupby
    pom resource配置
    FastReport打印table
  • 原文地址:https://www.cnblogs.com/zealousness/p/10022664.html
Copyright © 2011-2022 走看看