Python 从.tif文件中减去2个像素值会得到错误的结果

Python 从.tif文件中减去2个像素值会得到错误的结果,python,raster,gdal,subtraction,Python,Raster,Gdal,Subtraction,我尝试减去两个.tif图像。 为此,我使用以下代码: import numpy as np import os from osgeo import gdal,ogr import copy from PIL import Image import time def loadTifAsArray(image, filepath): print("Loading "+image) path = os.path.join(filepath,image) tif = gdal.

我尝试减去两个.tif图像。 为此,我使用以下代码:

import numpy as np
import os
from osgeo import gdal,ogr
import copy
from PIL import Image
import time

def loadTifAsArray(image, filepath):
    print("Loading "+image)
    path = os.path.join(filepath,image)
    tif = gdal.Open(path)
    tifArray = tif.ReadAsArray()
    return tifArray

def subtract(image1, image2):
    # Copy of one of the images is used for saving calculated values
    print("Subtracting ...")
    sub = copy.deepcopy(image1)
    rows = len(sub)    
    cols = len(sub[0])

    for px in range(cols):
        for py in range(rows):
            sub[px][py] = image1[px][py] - image2[px][py]

    return sub


start_time = time.time()

cwd = os.getcwd()
filepath = os.path.join(cwd,'tifs')
arr = os.listdir(filepath)
tifList = []

for image in arr:
    tifList.append(loadTifAsArray(image, filepath))
print("--- %s seconds for loading the images ---" % (time.time() - start_time))

sub = subtract(tifList[0], tifList[1])
print("--- %s seconds for loading and subtracting ---" % (time.time() - start_time))
我减去作为光栅数据加载的图像,然后简单地制作一个图像的深度副本,将计算值存储在其中

问题在于计算值。 当我查看索引[0][0]处两幅图像的值时,我得到以下值:

print(image1[0][0]) 
print(image2[0][0])
505

549

当我尝试减去它们时,我得到:

print(image1[0][0] - image2[0][0])
65492


我不明白这是为什么,如果有任何帮助,我将不胜感激

闻起来像溢油!基本上,我假设您的图像是
uint16
图像,负数“环绕”回到最大值。
请注意,您期望的是44,但得到的是
2^16-44

解决方法非常简单;例如,通过在
subtract
函数的开头添加,将图像强制转换为float32:

image1 = np.array(image1).astype(np.float32)
image2 = np.array(image2).astype(np.float32)
祝你好运



附言:当然,
np
只是我个人的喜好。您可以选择其他最适合您的方式。

感谢您的快速响应!同时也感谢您优雅的解决方案!我会尽快接受你的回答:)很高兴我能帮上忙:——)我第一次遇到这种事情时,我记得太清楚了!