第二学习周(5.15-6.4)

文章介绍了如何将csv文件转换为pcd格式,涉及PCL库的使用。同时,探讨了CNN在HSI和lidar数据融合中的角色,以及特征工程的常见步骤。此外,文章还提到了mat和tif文件格式的相互转换,并分享了在Chrome中处理非私密链接的方法。最后,讨论了在jupyter环境中创建虚拟环境的步骤,以及Qt编程中的QDateTime和QString的转换技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 第一天5.15  星期一   csv转pcd   mat转tif  Chrome私密链接

今天主要阅读了篇论文,并深入了解了多源数据融合的概念,学习了几个相关问题的解答,以及mat格式和tif格式的互相转化:

一、csv转pcd

注意:csv文件必须有三列,且分别表示x,y,z的坐标,且不能有表头,代码如下:

#include <string>
#include <vector>
#include <fstream>
#include <sstream>
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <boost/thread/thread.hpp>

using namespace std;

#pragma region //csv转为pcd
// 删除字符串中空格,制表符tab等无效字符
string Trim(string& str)
{
	//str.find_first_not_of(" \t\r\n"),在字符串str中从索引0开始,返回首次不匹配"\t\r\n"的位置
	str.erase(0, str.find_first_not_of(" \t\r\n"));
	str.erase(str.find_last_not_of(" \t\r\n") + 1);
	return str;
}

void csv2pcd(std::string filename, pcl::PointCloud<pcl::PointXYZ>::Ptr& cloud)
{
	ifstream fin(filename);      //打开文件流操作
	string line;
	while (getline(fin, line))   //整行读取,换行符“\n”区分,遇到文件尾标志eof终止读取
	{
		istringstream iss(line); // 创建输入string流对象,保存line的一个副本
		vector<string> fields;   // 声明一个字符串向量
		string field;
		while (getline(iss, field, ',')) //将字符串流iss中的字符读入到field字符串中,以逗号为分隔符
		{
			fields.push_back(field);     //将刚刚读取的字符串添加到向量fields中
		}
		pcl::PointXYZ point;
		point.x = float(atof(Trim(fields[0]).c_str())); //Trim用于清除掉向量fields中的无效字符
		point.y = float(atof(Trim(fields[1]).c_str()));
		point.z = float(atof(Trim(fields[2]).c_str()));
		cloud->push_back(point);
	}
}
#pragma endregion 

int main()
{
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);

	csv2pcd("ptcloud_OSBS_002.csv", cloud);
	cout << "读取点云点的个数为:" << cloud->points.size() << endl;
	//-----------------------保存pcd文件-------------------------
	pcl::io::savePCDFileASCII("ptcloud_OSBS_002.pcd", *cloud);
	pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer("Viewer"));
	viewer->setBackgroundColor(0, 0, 0);
	// 按照z字段进行渲染,将z改为x或y即为按照x或y字段渲染
	pcl::visualization::PointCloudColorHandlerGenericField<pcl::PointXYZ> fildColor(cloud, "z");
	viewer->addPointCloud<pcl::PointXYZ>(cloud, fildColor, "sample cloud");

	while (!viewer->wasStopped())
	{
		viewer->spinOnce(100);
		boost::this_thread::sleep(boost::posix_time::microseconds(100000));
	}

	system("pause");
	return 0;
}

二、问题解答

1.CNN在HSI和lidar数据融合中的作用

CNN提取图像的深度特征,然后再用多层感知机( multilayer percseptron) ,即全连接网络和 softmax 函数作为分类器,对提取出的深度特征进行分类.

2.典型的特征工程包括:计算各种植被指数和纹理特征

3.chrome浏览器如果对一个网页提示不是私密链接

解决方法:聚焦到 chrome 浏览器 不是私密连接 的页面,然后键盘输入 “thisisunsafe” 12个字母,此时浏览器就会加载出网站页面了

三、mat格式与tif格式的互相转化

1.mat转tif:

import scipy.io as sio
import numpy as np
from osgeo import gdal

# 加载.mat文件
data = sio.loadmat('data.mat')

# 提取高光谱图像数据
hsi_data = data['hsi']

# 将数据归一化到[0, 1]范围
hsi_data = (hsi_data - np.min(hsi_data)) / (np.max(hsi_data) - np.min(hsi_data))

# 将高光谱图像数据转换为.tif格式
driver = gdal.GetDriverByName('GTiff')
output_file = 'output.tif'
rows, cols, bands = hsi_data.shape
output = driver.Create(output_file, cols, rows, bands, gdal.GDT_Float32)
for i in range(bands):
    output.GetRasterBand(i + 1).WriteArray(hsi_data[:, :, i])
output = None

注:刚转化处理用ENVI打开会只有一个波段的选择,用ENVI重新打开即可解决

2.tif转mat(待补充)

5.16-6.4  jupyter使用     几点开发的注意事项     遥感知识梳理 QString和QDateTime的转化

一、使用jupyter使用创建的虚拟环境步骤

1.conda install ipykernel

2. activate data

3.python -m ipykernel install --name data

二、开发过程中的注意事项

1.活用全局变量,比如让一个变量自增时,但它又与多个函数有关,这时就用用到全局变量

2.关于获取当前时间的使用,年月日、度分秒

    qDebug() << now.toString("yyyy-MM-dd");
    qDebug() << now.toString("yyyy-MM-dd HH:mm:ss");
    qDebug() << now.toString("HH:mm:ss");

3.QString now_date = now.toString("yyyy-MM-dd");   可获取当前日期

4.killTimer(timer_XX);     可以将定时器关闭

5.循环一定不要出界

6.QStringLIst的对象添加数据时,一定要用temp.append(a);            

不能用temp[i]=fileInfo->at(i).fileName()

7.0是假,其他的数字是真

8.有关QDateTime的几个使用与QString和QDateTime的转化

    // 待转换的QString
    QString str = "2022-02-22 22:22:58"; 
    // 通过fromString()将QString转为QDateTime
    QDateTime dateTime = QDateTime::fromString(str, "yyyy-MM-dd hh:mm:ss"); 
    // 可以通过toString()方法将QDateTime转为QString进行输出
    qDebug() << dateTime.toString("yyyy-MM-dd hh:mm:ss");
    //toMSecsSinceEpoch()方法会将日期时间对象转换为从1970年1月1日0时分0秒UTC(即时间)开始的毫秒数
    qDebug() << dateTime.toMSecsSinceEpoch();  

9.复制代码时一定不要丢括号

三、遥感知识梳理

1.计算植被覆盖率通常用NDVI反算,(二分法)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值