C++实现遥感图像NDVI计算与存储

代码功能:

这段C++代码使用MFC库中的CFile类实现了遥感图像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('NDVI', 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();
}

CFile读写函数解释:

  1. fReadFile.Open(m_pathname, CFile::modeReadWrite):以可读可写模式打开指定路径的文件。
  2. fWriteFile.Open('NDVI', CFile::modeCreate | CFile::modeWrite):创建名为'NDVI'的新文件,并以写入模式打开。
  3. fReadFile.Seek((fRed - 1) * Height * Width, CFile::begin):将文件指针移动到指定位置,以便读取特定波段的数据。
  4. fReadFile.Read(Red, Height * Width):读取指定大小的数据到缓存区。
  5. fWriteFile.Write(NDVIWr, sizeof(float) * Height * Width):将计算得到的NDVI值写入文件。
  6. fReadFile.Close()fWriteFile.Close():关闭文件,释放资源。

总结:

该代码示例展示了如何使用C++进行简单的遥感图像处理,并利用CFile类进行文件读写操作。通过修改代码,可以实现不同的遥感指数计算和数据处理功能。

C++实现遥感图像NDVI计算与存储

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

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