pcl версии 1.9.1 Я читаю файл .txt , и создаю PointXYZRGB , set x 、 y 、 z и rgb , вот так :
#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>
#include <pcl/io/obj_io.h>
#include <pcl/PolygonMesh.h>
#include <pcl/point_cloud.h>
#include <pcl/io/vtk_lib_io.h>
#include <pcl/visualization/cloud_viewer.h>
using namespace std;
using namespace pcl;
int main()
{
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZRGB>);
std::string s;
while (cin >> s) {
ifstream input(s);
std::string line;
std::int32_t number = 0;
while (getline(input, line))
{
if (number % 10000 == 0) {
cout << "重置点数"<<number<<endl;
cloud->points.resize(number + 10100);
}
stringstream sstr(line);
string token;
int32_t tokennumber = 0;
while (getline(sstr, token, ','))
{
if (tokennumber == 0) {
cloud->points[number].x = atof(token.c_str());
}
else if (tokennumber == 1) {
cloud->points[number].y = atof(token.c_str());
}
else if (tokennumber == 2) {
cloud->points[number].z = atof(token.c_str());
}
else if (tokennumber == 3) {
int32_t num = std::stoi(token.substr(1), NULL, 16);
int32_t red = num >> 16 & 0xFF;
int32_t green = num >> 8 & 0xFF;
int32_t blue = num & 0xFF;
cloud->points[number].r = red;
cloud->points[number].g = green;
cloud->points[number].b = blue;
uint32_t rgb = (red << 16) | (green << 8) | (blue);
cloud->points[number].rgb = rgb;
}
tokennumber++;
}
number++;
}
pcl::PolygonMesh mesh;
pcl::toPCLPointCloud2(*cloud, mesh.cloud);
pcl::io::saveOBJFile("C:\\Users\\ASUS\\Desktop\\out_color2.obj", mesh);
cout << "文件保存完毕";`
но когда я читаю файл .obj, я использую loadPolygonFileOBJ () , Я обнаружил, что PointXYZRGB не имеет rgb , он потерял цвет
#include <string>
#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>
#include <pcl/io/obj_io.h>
#include <pcl/PolygonMesh.h>
#include <pcl/point_cloud.h>
#include <pcl/io/vtk_lib_io.h>
#include <pcl/visualization/cloud_viewer.h>
using namespace pcl;
int main()
{
pcl::PolygonMesh mesh;
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZRGB>);
std::string s = "C:\\Users\\ASUS\\Desktop\\out_color2.obj";
pcl::io::loadPolygonFileOBJ(s, mesh);
pcl::fromPCLPointCloud2(mesh.cloud, *cloud);
for (int i = 0; i < cloud->points.size(); i++) {
PointXYZRGB point = cloud->points[i];
cout << point.z << point.x << point.y<<endl;
cout << point.r << point.g << point.b << endl;
}
boost::shared_ptr<visualization::PCLVisualizer> viewer(new visualization::PCLVisualizer("3D viewer"));
viewer->addPointCloud<PointXYZRGB>(cloud, "sample cloud");
viewer->setBackgroundColor(255, 255, 255);
while (!viewer->wasStopped()) {
viewer->spinOnce(100);
boost::this_thread::sleep(boost::posix_time::microseconds(1000));
}
}
return 0;
}
перед saveOBJFile (), viewer.showCloud () может отображать цвет, но когда saveOBJFile () и loadPolygonFileOBJ () после, потерян цвет. Этот файл .obj содержит цвет? Или что-то не так? так как я могу сохранить цвет тогда .obj файл