• opencv-viz模块《1》


    截至目前为止,在下使用opencv4年有余,曾在读研期间写了一个viz模块显示slam的3D轨迹教学,

    链接:https://www.cnblogs.com/winslam/p/9244598.html 

    前几天在度娘搜索opencv viz居然发现有个老哥的blog引用了我的blog,

    链接:https://blog.csdn.net/wq1psa78/article/details/103773469

    初看代码,感觉很熟悉,翻到最底下,居然还附上了我博客链接,这年头。。。这样有素质的人不多了。

       中文博客里面有关opencv viz模块的详细教程几乎没有。我这里给出一个详细教程。

    opencv viz模块其实依赖VTK。

     

      点云库也可以显示以上控件(点、线、面、球、箭头、2D文本、3D文本、点云等等,其余的请参考相关手册,查看构造函数)

      1 #include <iostream>
      2 #include <opencv2/viz.hpp>
      3 #include <opencv2/highgui.hpp>
      4 #include <opencv2/calib3d.hpp>
      5 
      6 using namespace std;
      7 using namespace cv;
      8 
      9 int main()
     10 {
     11     // window
     12     viz::Viz3d window("window");
     13     window.showWidget("Coordinate", viz::WCoordinateSystem());
     14     window.setBackgroundColor(viz::Color(186, 36, 1));
     15 
     16     // plane
     17     viz::WPlane plane(Size2d(2, 2), viz::Color(13, 255, 39));
     18     plane.setRenderingProperty(viz::LINE_WIDTH, 5);
     19     plane.setPose(Affine3f());
     20     window.showWidget("plane", plane);
     21 
     22     // line
     23     viz::WLine line(Point3d(0.0, 0.0, 0.0), Point3d(10.0, 10.0, 10.0), viz::Color::yellow());
     24     line.setRenderingProperty(viz::LINE_WIDTH, 2);
     25     //line.setPose(Affine3f());
     26     window.showWidget("line", line);
     27 
     28     // WSphere
     29     viz::WSphere sphere(Point3d(1, 4, 3), 2, 1, viz::Color::blue());
     30     sphere.setRenderingProperty(viz::LINE_WIDTH, 1);
     31     window.showWidget("sphere", sphere);
     32 
     33     // WArrow
     34     viz::WArrow warrow(Point3d(1, 1, 1), Point3d(-2, 8, -2), 0.03, viz::Color::red());
     35     warrow.setRenderingProperty(viz::LINE_WIDTH, 2);
     36     window.showWidget("warrow", warrow);
     37 
     38     // WCircle
     39     viz::WCircle wcricle(3.0, 0.02, viz::Color::navy());
     40     wcricle.setRenderingProperty(viz::LINE_WIDTH, 2);
     41     window.showWidget("wcricle", wcricle);
     42     
     43     // WPolyLine (将点集自动转为一根线显示,适合SLAM显示轨迹)
     44     vector<Point3d> points3d;
     45     for (int i = 0; i < 5; i++)
     46     {
     47         points3d.push_back(Point3d(i, i*i, 2 * i));
     48     }
     49 
     50     viz::WPolyLine wpolyLine(points3d, viz::Color::rose());
     51     wpolyLine.setRenderingProperty(viz::LINE_WIDTH, 2);
     52     window.showWidget("wpolyLine", wpolyLine);
     53     
     54     // WPaintedCloud 
     55     vector<Point3d> pointCloud;
     56     // 创建点云
     57     pointCloud.resize(points3d.size());
     58     for (size_t i = 0; i < points3d.size(); i++)
     59     {
     60         pointCloud[i] = points3d[i] * 3;
     61     }
     62     viz::WPaintedCloud wpaintedCloud(pointCloud);
     63     wpaintedCloud.setRenderingProperty(viz::POINT_SIZE, 4);
     64     window.showWidget("wpaintedCloud", wpaintedCloud);
     65 
     66     // WGrid
     67     viz::WGrid wgrid(Vec2i::all(10), Vec2d::all(1.0), viz::Color::white());
     68     window.showWidget("wgrid", wgrid);
     69 
     70     // WCube
     71     viz::WCube wcube(Vec3d::all(-5), Vec3d::all(5), true, viz::Color::cherry());
     72     wcube.setRenderingProperty(viz::LINE_WIDTH, 3);
     73     window.showWidget("wcube", wcube);
     74 
     75     // WText(2D)
     76     viz::WText wtext("OpenCV", Point2i(100, 100), 20, viz::Color::green());
     77     window.showWidget("wtext", wtext);
     78 
     79     // WText3D
     80     viz::WText3D wtext3d("OpenCV", Point3d(6, 5, 5), 4.1, true, viz::Color::white());
     81     window.showWidget("wtext3d", wtext3d);
     82 
     83     // WTrajectory
     84     // Displays a poly line that represents the path. 先要将点进行拟合??
     85     /*viz::WTrajectory wtrajectory(points3d, viz::WTrajectory::PATH, 1.0, viz::Color::green());
     86     wtrajectory.setRenderingProperty(viz::LINE_WIDTH, 3); 
     87     window.showWidget("wtrajectory", wtrajectory);*/
     88     
     89     Mat rvec = Mat::zeros(1, 3, CV_32F);
     90     while (!window.wasStopped())
     91     {
     92         rvec.at<float>(0, 0) = 0.f;
     93         rvec.at<float>(0, 1) += CV_PI * 0.01f;
     94         rvec.at<float>(0, 2) = 0.f;
     95         Mat rmat;
     96         Rodrigues(rvec, rmat);
     97         Affine3f pose(rmat, Vec3f(0, 0, 0));
     98 
     99         window.setWidgetPose("plane", pose);
    100 
    101         window.showWidget("line", line);
    102 
    103         window.showWidget("sphere", sphere);
    104 
    105         window.showWidget("warrow", warrow);
    106 
    107         window.showWidget("wcricle", wcricle);
    108 
    109         window.showWidget("wpolyLine", wpolyLine);
    110 
    111         window.showWidget("wpaintedCloud", wpaintedCloud);
    112 
    113         //window.showWidget("wtrajectory", wtrajectory);
    114 
    115         window.showWidget("wgrid", wgrid);
    116 
    117         window.showWidget("wcube", wcube);
    118 
    119         window.showWidget("wtext", wtext);
    120 
    121         window.showWidget("wtext3d", wtext3d);
    122 
    123         window.spinOnce(1, true);
    124     }
    125     
    126     window.removeAllWidgets();
    127     return 1;
    128 }
  • 相关阅读:
    如何使用Vue原生组件编译应用程序主题?这个工具不要错过
    BTC系统中具体的区块信息
    hash(哈希)
    比特币共识协议
    计算多分类softmax的loss function
    逻辑回归0.环境设定
    分布式共识
    Hash pointer(哈希指针)
    数字货币中经常出现的问题
    比特币激励机制
  • 原文地址:https://www.cnblogs.com/winslam/p/13892060.html
Copyright © 2020-2023  润新知