如何以灰度转换 Cartopy 瓦片?

How to convert Cartopy tiles in grayscale?

我正在尝试以灰度显示通过 Cartopy 的 img_tiles 模块下载的图块。那是因为我想覆盖彩色编码的卫星数据,并且我更喜欢背景尽可能不分散注意力。

source code 中记录的各种图块提供程序允许在初始化期间使用 desired_tile_form。该文档并不完全清楚可以分配给该参数的可能值(仅提到 "RGB"),但在代码中挖掘了一下我发现它被传递给了 img.convert,这是一个PIL.image 方法。

现在 PIL documentation 说:

The current version supports all possible conversions between “L”, “RGB” and “CMYK.” The matrix argument only supports “L” and “RGB”.

When translating a color image to black and white (mode “L”), the library uses the ITU-R 601-2 luma transform: [...]

所以看起来使用 "L" 模式会将图像变成黑白,但在我的情况下这似乎并不奏效。

示例:

标准"RGB"模式:

import matplotlib.pyplot as plt    
import cartopy.crs as ccrs
import cartopy.io.img_tiles as cimgt

figure, ax = plt.subplots(figsize=(15, 10))
request = cimgt.StamenTerrain()
ax = plt.axes(projection=request.crs)
ax.set_extent([94, 102, 0, 6])
ax.add_image(request, 8)
plt.show()

(不工作)黑白模式:

figure, ax = plt.subplots(figsize=(15, 10))
request = cimgt.StamenTerrain(desired_tile_form="L")

ax = plt.axes(projection=request.crs)
ax.set_extent([94, 102, 0, 6])
ax.add_image(request, 8)
plt.show()

我得到了与 GoogleTiles() 相似的结果。

将磁贴变成黑白的正确方法是什么?

我不确定这是否是设计使然,但看起来这里使用的是默认颜色图。您可以将不同的颜色图传递给 add_image() 方法,例如:

ax.add_image(request, 8, cmap='gray')

Here's a list of colormaps available in Matplotlib.