是否可以使用 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 以获得更多颜色图。
我正在尝试通过绘制 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 以获得更多颜色图。