C++ 使用GDAL库遥感影像失败,求解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 使用GDAL库遥感影像失败,求解相关的知识,希望对你有一定的参考价值。

使用GDAL库来读取遥感影像(数据格式如:***.dat),读取失败。读取代码如图1所示,调试时poDataset如图2所示。显示如:<无可用信息,未为gdal111.dll加载任何符号> 。这个问题是为什么?该如何解决?求解啊。多谢。
(图1)

(图2)

参考技术A 首先在数据库里边获得文件的大小,然后给progressbar设置一个最大值;在根据已经下载的文件大小计算站总大小的百分数,然后换算成progressbar的值;一边下载一边设置progressbar的值就行了。本回答被提问者和网友采纳 参考技术B 请问楼主解决了吗,我也出现了这个问题了,在保存图像的时候 。64位+vs2015+gdal2.2.1

python读取tif格式的遥感影像(灰度图)并用迭代法阈值选择算法进行二值化处理

在python中,一般的图像处理库或者绘图库无法处理或显示遥感影像,例如Matplotlib,opencv,scipy等等,用这些库读取遥感影像数值会发生一定的错误,从而导致后续工作无法展开。因此我们需要用到GDAL这个库。

GDAL的安装

GDAL轮子安装网址

找到与自己python相对应的版本即可
轮子安装完成后,在终端cd到轮子的安装位置,输入pip install “文件名”
这样就完成GDAL的安装了

批量读取遥感影像

import os

from osgeo import gdal

filedir = "D:/img"		# 图片所在路径
for image in os.listdir(filedir):
	print(image)
	driver = gdal.GetDriverByName("GTiff")
	driver.Register()
	img = gdal.Open(filedir + '/' + image)
	im_width = img.RasterXSize	# 栅格矩阵的列数
	print("im_width:", im_width)
	im_height = img.RasterYSize	# 栅格矩阵的行数
	print("im_height:", im_height)
	band = img.GetRasterBand(1)
	im_data = img.ReadAsArray(0, 0, im_width, im_height)	# 获取数据
	print(im_data)

迭代法阈值选择算法

迭代法阈值选择算法是对双峰法的改进,首先选择一个近似的阈值T,将图像分割成两份,R1和R2,分别计算出R1和R2的均值u1和u2,再选择新的阈值T=(u1+u2)/2,重复以上步骤,直到u1和u2不再变化。

迭代法是基于逼近的思想,其步骤如下:
(1)求出图像的最大灰度值和最小灰度值,分别记为ZMAX和ZMIN,令初始阈值为T=(ZMAX+ZMIN)/2
(2)根据阈值T将图像分割为前景和背景,分别求出两者的平均灰度值ZO和ZB
(3)求出新阈值T=(ZO+ZB)/2
(4)若两个平均灰度值ZO和ZB不再发生变化(或T不再变化),则T为阈值,否则转(2)迭代计算

完整代码

import cv2
import os

import numpy as np
import pandas as pd
from osgeo import gdal

filedir = "D:/img"		# 图片所在路径
savedir = "D:/image"	# 保存路径
for image in os.listdir(filedir):
	print(image)
	driver = gdal.GetDriverByName("GTiff")
	driver.Register()
	img = gdal.Open(filedir + '/' + image)
	im_width = img.RasterXSize	# 栅格矩阵的列数
	print("im_width:", im_width)
	im_height = img.RasterYSize	# 栅格矩阵的行数
	print("im_height:", im_height)
	band = img.GetRasterBand(1)
	im_data = img.ReadAsArray(0, 0, im_width, im_height)	# 获取数据
	print(im_data)
	img = np.array(im_data)
	ZMAX = 0; ZMIN = 255
	ZO = 0; ZB = 255
	for i in img:
		if max(i) > ZMAX:
			ZMAX = max(i)
		if min(i) < ZMIN:
			ZMIN = min(i)
	T = (ZMAX + ZMIN) / 2
	img = pd.DataFrame(img)
	while True:
		ZO_ = img[img>T].mean().mean()
		ZB_ = img[img<=T].mean().mean()
		if (ZO_ == ZO) and (ZB_ == ZB):
			break
		else:
			ZO = ZO_; ZB = ZB_
			T = (ZO + ZB) / 2
		print(T)
	img[img>T] = 255
	img[img<=T] = 0
	tiff.imsave(savedir + '/' + image, np.array(img))	# 保存二值化后的图像
print("finish")

以上是关于C++ 使用GDAL库遥感影像失败,求解的主要内容,如果未能解决你的问题,请参考以下文章

gdal学习笔记利用python 的gdal,以及相关库进行遥感图像处理(影像裁剪,辐射定标,大气校正,异常值去除)——以基于landsat8数据提取NDVI为例

遥感影像Python GDAL 像素与坐标对应

python读取tif格式的遥感影像(灰度图)并用迭代法阈值选择算法进行二值化处理

Python遥感图像处理应用篇(十六):GDAL 将归一化处理csv数据转化为遥感影像

Python遥感图像处理应用篇(十六):GDAL 将归一化处理csv数据转化为遥感影像

Python遥感图像处理应用篇(十七):GDAL 将归一化处理csv数据转化为多波段遥感影像