是否可以使用 matplotlib 通过曲面图实现连续的颜色渐变?

Is it possible to achieve a continuous color gradient with surface plot using matplotlib?

我正在尝试通过绘制 3D 图形来可视化照片的像素强度。在下面的代码中,lab 是我要分析的图像。该代码将查看图像中每个像素的像素强度并绘制图表,其中高度表示像素强度。

这是我的部分代码:

import cv2
import numpy as np

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm

from skimage import io, color
import glob
from PIL import Image


plt.figure(dpi=1200)
    ax = plt.axes(projection='3d')
    y = range(lab.shape[0])
    x = range(lab.shape[1])
    X, Y = np.meshgrid(x, y)

    ax.view_init(elev=60., azim=60)

    thickness = ax.plot_surface(
        X,
        Y,
        lab[:, :, 0],  # change value here to adjust the height
        cmap=cm.coolwarm,
        antialiased=False)

    # Add a color bar which maps values to colors.
    fig.colorbar(thickness, shrink=0.5, aspect=5)

它输出:

如您所见,尽管图形具有许多精细的细节和高度的轻微波动,但颜色图并未表现出来,但颜色渐变并不连续。 是否可以像下图那样使用 matplotlib 实现带有曲面图的连续颜色渐变?

谢谢。

您可以使用颜色图 hsv 获得相同的结果。

import cv2
import numpy as np

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm

from skimage import io, color
import glob
from PIL import Image

lab = cv2.imread('Lenna.png')
lab = cv2.cvtColor(lab, cv2.COLOR_BGR2LAB)

fig = plt.figure()
ax = plt.axes(projection='3d')
y = range(lab.shape[0])
x = range(lab.shape[1])
X, Y = np.meshgrid(x, y)

ax.view_init(elev=60., azim=60)

thickness = ax.plot_surface(
        X,
        Y,
        lab[:, :, 0],  # change value here to adjust the height
        cmap=plt.get_cmap('hsv'),
        antialiased=False)

# Add a color bar which maps values to colors.
fig.colorbar(thickness, shrink=0.5, aspect=5)

plt.show()

输出:

查看 the documentation 以获得更多颜色图。