<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

        SLCM真是博大精深。之前簡單的學習了OpenCV,主要是是使用python語言,現在學習SLAM需要使用C++,略難,但比起SLAM本身,不值一提。

           《視覺SLAM十四講》里面的環境主要是在Ubuntu下的,我在虛擬機和JetsonTX2上分別試了一下,按照教程就可以。不過我覺著在Windows10下也能行,所以就搭建了一遍環境,運行完全沒問題。其源碼的3rdparty文件夾中提供了幾個功能庫,只需要把頭文件和可能有的鏈接庫等加進去就好了,完全可以通過編譯,個別還是不行的話,把.cpp文件也用 #include 包含進去試試。后來在第五章時遇到點小問題,但最終還是跑起來了。

        安裝PCL等主要參考博客如下: https://blog.csdn.net/weixin_41991128/article/details/83864713

            他用的visual studio 2017,我用的visual studio 2019,但是沒發現啥區別,所有東西都按2017的裝就可以了。

            就像里面介紹的,需要把那一大堆的.lib鏈接庫都寫進去。注意查看自己的鏈接庫對應的版本,把后面的數字修改為自己的版本就可以了。而且里面有一個快速獲取自己的鏈接庫的做法,很方便。還要注意在 屬性->c++目錄 中的 可執行文件庫、包含目錄、引用目錄、庫目錄 等選項中將所有的 .h .lib .dll 文件所在的文件夾的絕對目錄都加進去。 而一旦報錯:..無法解析的外部函數..  以我的經驗來看都是鏈接庫沒加全造成的。報錯:找不到 xx.dll xx.lib  xx.h等都是你的絕對路徑沒包含全的問題,在前面說的屬性中對應的項目里面包含上這些地址好讓編譯器能找到就可以了。最后就是,包含完后還有問題的話,重新啟動一次visual studio 再編譯試試。

          另外,本測試需要支持opencv,我用的opencv4.1.0版本。因為使用了最基本的opencv操作,所以我覺得opencv3.x以上的版本都能正常運行。

           所有的處理都做完后,就可以測試代碼了。源碼->ch5->joinMap 中的代碼直接復制粘貼,修改其中 psoe.txt 和兩種圖片的地址,然后就能編譯了。可是編譯后人家是在Ubuntu中顯示點云的,在Windows10下命令沒用,所以就自己加一個顯示的函數。整個函數如下:

        1 #include <opencv2/opencv.hpp>
        2 #include<opencv2\core\core.hpp>  
        3 #include<opencv2\highgui\highgui.hpp> 
        4 
        5 #include <boost/format.hpp>  // for formating strings
        6 #include <pcl/visualization/cloud_viewer.h>
        7 #include <iostream>
        8 #include <pcl/io/io.h>
        9 #include <pcl/io/pcd_io.h>
       10 #include <pcl/surface/3rdparty/poisson4/vector.h>
       11 #include <pcl/point_types.h>
       12 
       13 
       14 int main()
       15 {
       16     pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZRGB>);//創建一個共享指針并且實例化。注意兩個PointXYZRGB要統一,最后顯示時還有一個也要統一。當改為PointXYZ表示只輸入XYZ坐標值,凸顯改為黑白的
       17     
       18     //以下為十四講中的源碼
       19     //向量 vector 是一種對象實體, 能夠容納許多其他類型相同的元素, 因此又被稱為容器。
       20     std::vector<cv::Mat> colorImgs, depthImgs;    // 彩色圖和深度圖
       21     std::vector<Eigen::Isometry3d, Eigen::aligned_allocator<Eigen::Isometry3d>> poses;         // 相機位姿
       22 
       23     std::ifstream fin("D:\\Mystudy\\opencv_forc\\mycode\\ConsoleApplication1\\ConsoleApplication1\\pose.txt");//注意改成自己存放pose.txt的地址
       24     if (!fin)
       25     {
       26         std::cerr << "請在有pose.txt的目錄下運行此程序" << std::endl;
       27         return 1;
       28     }
       29 
       30     for (int i = 0; i < 5; i++)
       31     {
       32         boost::format fmt("D:/Mystudy/SLAM/視覺SLAM十四講源碼slambook-master/slambook-master/ch5/joinMap/%s/%d.%s"); //圖像文件格式,
       33         colorImgs.push_back(cv::imread((fmt % "color" % (i + 1) % "png").str()));
       34         depthImgs.push_back(cv::imread((fmt % "depth" % (i + 1) % "pgm").str(), -1)); // 使用-1讀取原始圖像
       35 
       36         double data[7] = { 0 };
       37         for (auto& d : data)
       38             fin >> d;
       39         Eigen::Quaterniond q(data[6], data[3], data[4], data[5]);
       40         Eigen::Isometry3d T(q);
       41         T.pretranslate(Eigen::Vector3d(data[0], data[1], data[2]));
       42         poses.push_back(T);
       43     }
       44 
       45     // 計算點云并拼接
       46     // 相機內參 
       47     double cx = 325.5;
       48     double cy = 253.5;
       49     double fx = 518.0;
       50     double fy = 519.0;
       51     double depthScale = 1000.0;
       52 
       53     std::cout << "正在將圖像轉換為點云..." << std::endl;
       54 
       55     // 定義點云使用的格式:這里用的是XYZRGB
       56     typedef pcl::PointXYZRGB PointT;
       57     typedef pcl::PointCloud<PointT> PointCloud;
       58 
       59     // 新建一個點云
       60     PointCloud::Ptr pointCloud(new PointCloud);
       61     for (int i = 0; i < 5; i++)
       62     {
       63         std::cout << "轉換圖像中: " << i + 1 << std::endl;
       64         cv::Mat color = colorImgs[i];
       65         cv::Mat depth = depthImgs[i];
       66         Eigen::Isometry3d T = poses[i];
       67         for (int v = 0; v < color.rows; v++)
       68             for (int u = 0; u < color.cols; u++)
       69             {
       70                 unsigned int d = depth.ptr<unsigned short>(v)[u]; // 深度值
       71                 if (d == 0) continue; // 為0表示沒有測量到
       72                 Eigen::Vector3d point;
       73                 point[2] = double(d) / depthScale;
       74                 point[0] = (u - cx) * point[2] / fx;
       75                 point[1] = (v - cy) * point[2] / fy;
       76                 Eigen::Vector3d pointWorld = T * point;
       77 
       78                 PointT p;
       79                 p.x = pointWorld[0];
       80                 p.y = pointWorld[1];
       81                 p.z = pointWorld[2];
       82                 p.b = color.data[v * color.step + u * color.channels()];
       83                 p.g = color.data[v * color.step + u * color.channels() + 1];
       84                 p.r = color.data[v * color.step + u * color.channels() + 2];
       85 
       86                 //std::cout << p.x<<" "<<p.y<<" "<<p.b<<" " << i + 1 << std::endl;
       87                 pointCloud->points.push_back(p);
       88             }
       89     }
       90 
       91     pointCloud->is_dense = false;
       92     std::cout << "點云共有" << pointCloud->size() << "個點." << std::endl;
       93     pcl::io::savePCDFileBinary("map.pcd", *pointCloud);
       94     
       95     //以下為點云顯示代碼
       96     if (pcl::io::loadPCDFile<pcl::PointXYZRGB>("D:\\Mystudy\\opencv_forc\\mycode\\ConsoleApplication1\\ConsoleApplication1\\map.pcd", *cloud) == -1)//*cloud,指針的內容是文件內容,記得標明點云類型<pcl::PointXYZ>
       97     {
       98         PCL_ERROR("請檢查 xx.pcd 是否存在\n");//pcl有專門的報錯函數PCL_ERROR
       99         return(-1);
      100     }
      101     pcl::visualization::CloudViewer viewer("pcd viewer");//給顯示窗口命名,CloudViewer
      102     viewer.showCloud(cloud);//定義要顯示的對象,showCloud
      103     //viewer.showCloud(pointCloud);//也可以直接顯示上面編譯好的點云圖,不必保存再讀出了
      104     system("pause");//此處防止顯示閃退
      105     
      106 
      107     return 0;
      108 }

       效果圖就和在Ubuntu下運行的一樣,能夠鼠標拖動查看。

       

      本文水平有限,內容很多詞語由于知識水平問題不嚴謹或很離譜,但主要作為記錄作用,能理解就好了,希望以后的自己和路過的大神對必要的錯誤提出批評與指點,對可笑的錯誤不要嘲笑,指出來我會改正的。 

       另外,轉載使用請注明出處。                                                                                                

                                                                                                                                                               隨夢,隨心,隨愿,恒執念,為夢執戰,執戰蒼天!    ------------------執念執戰

       

       

            

      posted on 2019-06-17 13:39  執念執戰  閱讀(1446)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 久久午夜电影网| 老司机午夜精品视频资源| 2020国产欧洲精品网站| 日韩有码国产精品一区| 四虎影视4hu4虎成人| 中文无码vr最新无码av专区| 欧美一区二区三区激情| 婷婷成人丁香五月综合激情| 亚洲av色香蕉一二三区| 隆化县| 亚洲精品中文字幕一区二| 午夜免费福利小电影| 国产成人高清精品亚洲| 乱码精品一区二区亚洲区| 秋霞在线观看秋| 亚洲自拍偷拍激情视频| 国产精欧美一区二区三区| 中文字幕第一页国产精品| 精品人妻中文字幕在线| 国产成人久久综合一区| 亚洲国产精品第一二三区| 九九热精品免费视频| 亚洲无人区一码二码三码| 国产成人精品亚洲资源| 色爱综合另类图片av| 久久精品国产亚洲av麻豆小说| 成人国产精品一区二区网站公司| 日韩精品一区二区高清视频 | 亚洲综合天堂一区二区三区| 亚洲精品国产综合久久一线| 盐津县| 69人妻精品中文字幕| 男人的天堂av一二三区| 国产亚洲av嫩草久久| 四虎成人在线观看免费| 精品人伦一区二区三区蜜桃免费| 亚洲综合黄色的在线观看| 亚洲 日本 欧洲 欧美 视频| 成人国产精品日本在线观看| 在线观看中文字幕码国产| 久久天天躁狠狠躁夜夜躁|