基于C++的遥感影像NDVI计算与输出

本代码片段展示了如何使用C++计算遥感影像的NDVI(归一化植被指数),并将结果保存到文件。

void CBandMath::NDVICal(CString m_pathname, int Bands, int Width, int Height, int DataType) {
	int fRed, fNearRed;

	if (DataType == 1) { // TM 数据
		fRed = 3;
		fNearRed = 5;
	}

	CString m_OutFile;

	float *NDVIWr = new float[Height * Width];
	unsigned char *Red = new unsigned char[Height * Width];
	unsigned char *NearRed = new unsigned char[Height * Width];

	CFile fReadFile, fWriteFile;
	if (!fReadFile.Open(m_pathname, CFile::modeReadWrite)) { // 打开图像文件
		AfxMessageBox('不能打开所读文件!');
		return;
	}

	if (!fWriteFile.Open('001', CFile::modeCreate | CFile::modeWrite)) { // 打开写入文件
		AfxMessageBox('请选择输出文件!');
		return;
	}

	fReadFile.Seek((fRed - 1) * Height * Width, CFile::begin);
	fReadFile.Read(Red, Height * Width);

	fReadFile.Seek((fNearRed - 1) * Height * Width, CFile::begin);
	fReadFile.Read(NearRed, Height * Width);

	for (int k = 0; k < Height * Width; k++) {
		NDVIWr[k] = ((float)NearRed[k] - Red[k]) / (NearRed[k] + Red[k]);
	}

	fWriteFile.Write(NDVIWr, sizeof(float) * Height * Width);

	delete[] NDVIWr;
	delete[] Red;
	delete[] NearRed;

	fReadFile.Close();
	fWriteFile.Close();
}

代码解释:

  1. 函数定义: CBandMath::NDVICal 函数接收影像路径、波段数、影像宽度、影像高度以及数据类型作为参数。
  2. 确定红光和近红外波段: 根据数据类型确定红光和近红外波段的索引。
  3. 内存分配: 为存储红光波段、近红外波段和NDVI结果分配内存空间。
  4. 文件读写:
    • 打开输入影像文件,读取红光和近红外波段数据。
    • 打开输出文件,用于存储NDVI计算结果。
  5. NDVI计算: 循环遍历每个像素,计算NDVI值: (近红外 - 红光) / (近红外 + 红光)
  6. 结果输出: 将计算得到的NDVI值写入输出文件。
  7. 内存释放: 释放之前分配的内存空间。
  8. 关闭文件: 关闭输入和输出文件。

注意: 代码中输出文件名固定为 '001',实际应用中需要根据需求修改。

关于输出文件头文件: 代码中没有提供输出文件的头文件信息,需要根据实际情况和数据处理需求确定。

基于C++的遥感影像NDVI计算与输出

原文地址: https://www.cveoy.top/t/topic/jlsU 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录