**

VS2017配置最新版PCL1.9.1(win10)

**
配置详细的配置安装过程参见一位大佬的博文,亲测有效,链接如下:
https://blog.csdn.net/weixin_41991128/article/details/83864713

  以上的博文中给出了可能出现的问题及解决办法,值得借鉴。

但是按照大佬的博文进行安装配置,最后还是出了一些问题,可能是因为PCL1.9.1与PCL1.9.0安装有些不同导致的吧,这里我直接来干货,给出解决问题的办法。

遇到的新问题:
( 配置过程忘记截图,这里语言描述,望大家谅解!)
安装好PCL试运行出现报错如下:
无法找到或者无法打开pcl_io_release.dll等一系列PCL相关的dll文件,以及OpenNI2.dll文件

解决的办法:
1>在PCL安装目录下搜索确实的文件OpenNI2.dll,及pcl_io_release.dll等缺失的文件(注:pcl_io_release.dll等一系列pcl相关dll文件均在一个文件夹下,搜索一个找到目录即可):

直接点击转到相应的文件夹下:

pcl_io_release.dll等一系列文件的查找方法相同:

2>选中所有的.dll文件移动至C---->Windows---->System32目录下

到此,问题便成功即可解决,至于在运行过程中出现的其他问题,具体可参见大佬的博客,链接在文章开头。
下面便开始运行炫酷的pcl了:
下图为显示效果图,相应的代码附在后文,对于代码运行只能显示一个黑色框图,无点云数据的现象,一般是显示视角的问题,首先考虑按下R切换点云显示视角。

测试代码如下:


#include <iostream>
#include <string>#include <pcl/io/ply_io.h>    //PLY相关头文件
#include <pcl/io/pcd_io.h>    //PCD相关头文件
#include <pcl/point_types.h>  //#include <pcl/registration/icp.h>//#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/console/time.h>   typedef pcl::PointXYZ PointT;
typedef pcl::PointCloud<PointT> PointCloudT;   //定义点云的格式bool next_iteration = false;void
print4x4Matrix(const Eigen::Matrix4d & matrix)    //打印旋转矩阵和平移矩阵
{printf("Rotation matrix :\n");printf("    | %6.3f %6.3f %6.3f | \n", matrix(0, 0), matrix(0, 1), matrix(0, 2));printf("R = | %6.3f %6.3f %6.3f | \n", matrix(1, 0), matrix(1, 1), matrix(1, 2));printf("    | %6.3f %6.3f %6.3f | \n", matrix(2, 0), matrix(2, 1), matrix(2, 2));printf("Translation vector :\n");printf("t = < %6.3f, %6.3f, %6.3f >\n\n", matrix(0, 3), matrix(1, 3), matrix(2, 3));
}void
keyboardEventOccurred(const pcl::visualization::KeyboardEvent& event,void* nothing)
{  //使用空格键来增加迭代次数,并更新显示if (event.getKeySym() == "space" && event.keyDown())next_iteration = true;
}int main()
{// 申明点云将要使用的PointCloudT::Ptr cloud_in(new PointCloudT);  // 原始点云PointCloudT::Ptr cloud_tr(new PointCloudT);  // 转换后的点云PointCloudT::Ptr cloud_icp(new PointCloudT);  // ICP 输出点云int iterations = 1;  // 默认的ICP迭代次数pcl::console::TicToc time;     //申明时间记录time.tic();       //time.tic开始  time.toc结束时间pcl::io::loadPCDFile("test.pcd", *cloud_in);//定义旋转矩阵和平移向量Matrix4d是为4*4的矩阵Eigen::Matrix4d transformation_matrix = Eigen::Matrix4d::Identity();  //初始化// 旋转矩阵的定义可以参考double theta = M_PI / 8;  // 旋转的角度用弧度的表示方法transformation_matrix(0, 0) = cos(theta);transformation_matrix(0, 1) = -sin(theta);transformation_matrix(1, 0) = sin(theta);transformation_matrix(1, 1) = cos(theta);// Z轴的平移向量 (0.4 meters)transformation_matrix(2, 3) = 0.4;//打印转换矩阵std::cout << "Applying this rigid transformation to: cloud_in -> cloud_icp" << std::endl;print4x4Matrix(transformation_matrix);// 执行点云转换pcl::transformPointCloud(*cloud_in, *cloud_icp, transformation_matrix);*cloud_tr = *cloud_icp;  // 备份cloud_icp赋值给cloud_tr为后期使用// 迭代最近点算法time.tic();        //时间pcl::IterativeClosestPoint<PointT, PointT> icp;icp.setMaximumIterations(iterations);    //设置最大迭代次数iterations=trueicp.setInputSource(cloud_icp);   //设置输入的点云icp.setInputTarget(cloud_in);    //目标点云icp.align(*cloud_icp);          //匹配后源点云icp.setMaximumIterations(1);  // 设置为1以便下次调用std::cout << "Applied " << iterations << " ICP iteration(s) in " << time.toc() << " ms" << std::endl;if (icp.hasConverged())//icp.hasConverged ()=1(true)输出变换矩阵的适合性评估{std::cout << "\nICP has converged, score is " << icp.getFitnessScore() << std::endl;std::cout << "\nICP transformation " << iterations << " : cloud_icp -> cloud_in" << std::endl;transformation_matrix = icp.getFinalTransformation().cast<double>();print4x4Matrix(transformation_matrix);}else{PCL_ERROR("\nICP has not converged.\n");return (-1);}// 可视化ICP的过程与结果pcl::visualization::PCLVisualizer viewer("ICP demo");// 创建两个观察视点int v1(0);int v2(1);viewer.createViewPort(0.0, 0.0, 0.5, 1.0, v1);viewer.createViewPort(0.5, 0.0, 1.0, 1.0, v2);// 定义显示的颜色信息float bckgr_gray_level = 0.0;  // Blackfloat txt_gray_lvl = 1.0 - bckgr_gray_level;// 原始的点云设置为白色的pcl::visualization::PointCloudColorHandlerCustom<PointT> cloud_in_color_h(cloud_in, (int)255 * txt_gray_lvl, (int)255 * txt_gray_lvl,(int)255 * txt_gray_lvl);viewer.addPointCloud(cloud_in, cloud_in_color_h, "cloud_in_v1", v1);//设置原始的点云都是显示为白色viewer.addPointCloud(cloud_in, cloud_in_color_h, "cloud_in_v2", v2);// 转换后的点云显示为绿色pcl::visualization::PointCloudColorHandlerCustom<PointT> cloud_tr_color_h(cloud_tr, 20, 180, 20);viewer.addPointCloud(cloud_tr, cloud_tr_color_h, "cloud_tr_v1", v1);// ICP配准后的点云为红色pcl::visualization::PointCloudColorHandlerCustom<PointT> cloud_icp_color_h(cloud_icp, 180, 20, 20);viewer.addPointCloud(cloud_icp, cloud_icp_color_h, "cloud_icp_v2", v2);// 加入文本的描述在各自的视口界面//在指定视口viewport=v1添加字符串“white 。。。”其中"icp_info_1"是添加字符串的ID标志,(10,15)为坐标16为字符大小 后面分别是RGB值viewer.addText("White: Original point cloud\nGreen: Matrix transformed point cloud", 10, 15, 16, txt_gray_lvl, txt_gray_lvl, txt_gray_lvl, "icp_info_1", v1);viewer.addText("White: Original point cloud\nRed: ICP aligned point cloud", 10, 15, 16, txt_gray_lvl, txt_gray_lvl, txt_gray_lvl, "icp_info_2", v2);std::stringstream ss;ss << iterations;            //输入的迭代的次数std::string iterations_cnt = "ICP iterations = " + ss.str();viewer.addText(iterations_cnt, 10, 60, 16, txt_gray_lvl, txt_gray_lvl, txt_gray_lvl, "iterations_cnt", v2);// 设置背景颜色viewer.setBackgroundColor(bckgr_gray_level, bckgr_gray_level, bckgr_gray_level, v1);viewer.setBackgroundColor(bckgr_gray_level, bckgr_gray_level, bckgr_gray_level, v2);// 设置相机的坐标和方向viewer.setCameraPosition(-3.68332, 2.94092, 5.71266, 0.289847, 0.921947, -0.256907, 0);viewer.setSize(1280, 1024);  // 可视化窗口的大小// 注册按键回调函数viewer.registerKeyboardCallback(&keyboardEventOccurred, (void*)NULL);// 显示while (!viewer.wasStopped()){viewer.spinOnce();//按下空格键的函数if (next_iteration){// 最近点迭代算法time.tic();icp.align(*cloud_icp);std::cout << "Applied 1 ICP iteration in " << time.toc() << " ms" << std::endl;if (icp.hasConverged()){printf("\033[11A");  // Go up 11 lines in terminal output.printf("\nICP has converged, score is %+.0e\n", icp.getFitnessScore());std::cout << "\nICP transformation " << ++iterations << " : cloud_icp -> cloud_in" << std::endl;transformation_matrix *= icp.getFinalTransformation().cast<double>();  // WARNING /!\ This is not accurate!print4x4Matrix(transformation_matrix);  // 打印矩阵变换ss.str("");ss << iterations;std::string iterations_cnt = "ICP iterations = " + ss.str();viewer.updateText(iterations_cnt, 10, 60, 16, txt_gray_lvl, txt_gray_lvl, txt_gray_lvl, "iterations_cnt");viewer.updatePointCloud(cloud_icp, cloud_icp_color_h, "cloud_icp_v2");}else{PCL_ERROR("\nICP has not converged.\n");return (-1);}}next_iteration = false;}int a;cin >> a;return (0);
}

PCD文件可以随便找一个进行测试,也可以在我的网盘连接中进行下载:
链接:https://pan.baidu.com/s/1HaKm7uZlCRZkJYeULW10RA
提取码:bpmi

VS2017配置最新版PCL1.9.1(win10)相关推荐

  1. Win10下 pcl1.9.1 +vs2017配置教程

    参考链接 Win10下 pcl1.9.1 +vs2017配置教程 - 哔哩哔哩 https://www.jianshu.com/p/ce68c20f4ba6 前言:PCL库安装较简单,参考上述两链接即 ...

  2. VS2017配置PCL1.9(win10环境)

    由于实验需要用到点云数据,正好网上搜PCL点云库的时候看到PCL1.9出来了,就索性跟随时代的步伐直接在VS2017上安装PCL1.9试一下. 文章目录 VS2017下载与安装 PCL1.9.0下载与 ...

  3. VS2017配置OpenCV4.0(Win10环境)

    之前一直在使用VS2015,虽然看到VS2017发布了,但由于手头事情比较多,就没有尝试使用,最近突然看到Opencv4.0-alpha发布了,新版本中加入了很多人工智能和机器学习的内容,所以决定系统 ...

  4. VS2017配置OpenCV3.2+contrib3.2

    VS2017配置OpenCV3.2+contrib3.2 前言 opecv3.2+opencv_contrib3.2模块都编译配置了 在配置contrib之前,尝试直接配置OpeCV3.2-vc14, ...

  5. vs2017python配置opencv_关于VS2017配置OpenCV出现无法打开文件“opencv_ml249d.lib”的解决方案...

    VS2017配置OpenCV的教程可以下面这个大佬的教程来: 在配置结束后,测试配置是否成功的时候,会出现问题. 在试过网上所有解决方案之后,仍旧不能运行成功,最后经自己尝试,终于找到了解决方案,解决 ...

  6. 低配本用win10服务器系统,杜宇低配置的电脑到底是安装win10系统好还是选择win7操作系统更好一点呢...

    导语:我们在准备给自己的电脑安装操作系统的时候,有的小伙伴可能就在纠结,如果是低配的电脑装win10流畅还是win7流畅.下面白豆芽就和大家详细解读杜宇低配置的电脑到底是安装win10系统好还是选择w ...

  7. VS2017 配置vlfeat

    VS2017 配置vlfeat 官网教程:http://www.vlfeat.org/vsexpress.html 下载vlfeat C代码版 http://www.vlfeat.org/downlo ...

  8. WIN10+CGAL+VS2017配置

    最近配置了CGAL4.11.3,环境为WIN10+VS2017按照网上的博客大神指导配置出了个大概,可是依然遇到不少小的问题.在这里总结一下,以供后期参考. 1.CGAL的基本配置可以参考一下两篇博文 ...

  9. win10+vs2017配置mpi环境的记录(已成功)

    并行计算的课程需要动手实验,需要在电脑上使用mpi 使用mpi有两种选择:虚拟机搭建集群,vs多线程模拟多机. 搭建集群太麻烦,果断放弃.决定使用vs2017多线程环境,通过mpi进行并行计算实验. ...

最新文章

  1. ios 裁剪框大小_iOS实现裁剪框和图片剪裁功能
  2. stm32车联网监控源码_物联网DIY,STM32配合ESP8266,APP控制LED,可以绑定天猫精灵...
  3. ML之xgboost:利用xgboost算法对breast_cancer数据集实现二分类预测并进行graphviz二叉树节点图可视化
  4. C#调用C++编写的DLL函数各种参数传递问题
  5. 频段表_VoLTE高低频段覆盖能力研究
  6. Contains Duplicate --包含相同值
  7. Deep Learning 论文笔记 (2): Neural network regularization via robust weight factorization
  8. Visual Studio Code 10 月 Python 扩展更新
  9. ITester软件测试小栈长期持续在线征集
  10. 企业如何选择数据分析架构?——谈谈3种架构的利弊
  11. 机器学习基础算法20-回归曲线拟合
  12. mysql列不明确_PHP和MYSQL:如何解决JOIN操作中不明确的列名?
  13. regsvr32注册Dll文件时出现0x80004005问题的解决方案
  14. 细数阿里 25 个开源的前端项目,让你的 2021 路更加平坦
  15. elementui日历组件实现可标记日历
  16. html中加号实体,纯css实现加号“+”效果(代码示例)
  17. 中国防卫科技学院计算机,2014高考专业介绍:科技防卫
  18. 深搜回溯与不回溯的区别
  19. python import pandas as pd_python – Pandas pd.Series.isin性能与集合与数组
  20. 吃透浏览器安全(同源限制/XSS/CSRF/中间人攻击)

热门文章

  1. Houdini开发:打开HDK的大门
  2. securecrt端口转发socks4/5 代理服务器
  3. 【数据库】mysql删库恢复
  4. 密盾科技即将推出同态加密隐私计算开源平台Pinsehub!
  5. 记录使用log4cpp析构报错
  6. 《机器学习工程师》朴素贝叶斯
  7. 软件工程实践作业----软件评测
  8. Altium Designer 18 速成实战 第五部分 PCB流程化设计常用操作(三十)Cutout的放置
  9. 亚洲国家互联网骨干网运营商及互联互通现状
  10. 微课在初中计算机教学中的运用,微课视频应用在初中信息技术教学中的几点体会论文...