未解決錯誤程序集錦

1. 讀取點雲txt文件,保存爲pcd文件

#include <pcl/io/pcd_io.h>  //PCD讀寫類相關的頭文件
#include <pcl/io/ply_io.h> 
#include<iostream>  

#include <pcl/point_types.h>
#include <pcl/visualization/cloud_viewer.h>

using namespace std;

int numofPoints(char* fname)
{
	int n = 0;
	int c = 0;
	FILE *fp;
	fp = fopen(fname, "r");
	do{
		c = fgetc(fp);
		if (c == '\n')
		{
			++n;
		}
	} while (c != EOF);
	fclose(fp);
	return n;
}
int main()
{
	int n = 0; //n用來計文件中點個數      
	FILE *fp_1;
	fp_1 = fopen("pointcloud.txt", "r");
		if (NULL == fp_1)//檢查是否讀取文件正確
	{
		printf("error");
	}
	n = numofPoints("cloudpoint.txt");//使用numofPoints函數計算文件中點個數  
	cout << "there are " << n << " points in the file..." << endl;
	//新建一個點雲文件,然後將結構中獲取的xyz值傳遞到點雲指針cloud中。  
	pcl::PointCloud<pcl::PointXYZ> cloud;//這種定義方式無法作爲指針顯示出來,但是其他都可以用
	pcl::PointCloud<pcl::PointXYZ>::Ptr seecloud (new pcl::PointCloud<pcl::PointXYZ>);//但是這個沒有成員width,height,所以下方顯示時要進行一個轉換
	cloud.width = n;
	cloud.height = 1;
	cloud.is_dense = false;  //不是稠密型的
	cloud.points.resize(cloud.width * cloud.height); //點雲總數的大小
	//將點雲讀入並賦給新建點雲指針的xyz      
	double x, y, z;
	int i = 0;
	while (6 == fscanf(fp_1, "%lf %lf %lf\n", &x, &y, &z))
	{
		//cout << x << " " << y << " " << z << endl;這句要不要都行,如果輸出的話轉換的速度會很慢,因爲每個點都會讀取出來
		cloud.points[i].x = x;
		cloud.points[i].y = y;
		cloud.points[i].z = z;
		cloud.points[i].r = r;
		cloud.points[i].g = g;
		cloud.points[i].b = b;
		++i;
	}
	fclose(fp_1);
	//*seecloud = cloud;//要轉換一下,cloud不能直接作爲指針顯示,而是用seecloud這個Ptr
	
	////顯示點雲
	//pcl::visualization::CloudViewer viewer("Viewer");
	//viewer.showCloud(seecloud);
	//while (!viewer.wasStopped())
	//{
	//}

	//pcl::io::savePCDFileASCII("03.pcd", cloud);  //存儲到PCD文件
	//std::cerr << "Saved " << cloud.points.size() << " data points to test_pcd.pcd." << std::endl;  //保存
	
	system("pause");
	return 0;
}

錯誤:生成解決方案沒有問題,但是調試不行
在這裏插入圖片描述
百度原因說是讀取文件的問題,錯誤提示也會跳到 fgetc()這個函數,但是不知道錯在哪裏,不知道咋改,先放着吧
在這裏插入圖片描述
百度了一下fgetc()的用法,感覺沒啥問題啊

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章