利用Python和OpenCV将图像灰度图转为3D图并显示
写文章的时候为了比较不同滤波器对灰度图像的滤波效果,需要将灰度图进行3D可视化,在网上搜索了很久,只搜到了matlab版本的,没有见到Python相关资源,然后就写了一下,和大家分享一下
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
if __name__ == "__main__":
img_path = r"./2.jpg"
img_gray = cv2.imread(img_path, 0)
# img_gray = cv2.resize(img_bgr, (224, 224))
Y = np.arange(0, np.shape(img_gray)[0], 1)
X = np.arange(0, np.shape(img_gray)[1], 1)
X, Y = np.meshgrid(X, Y)
fig = plt.figure()
ax = plt.axes(projection="3d")
ax.plot_surface(X, Y, img_gray, cmap='gist_rainbow') # cmap='hot'
plt.show()
from mpl_toolkits.mplot3d import Axes3D
一定要加上,不加的话会报错
Traceback (most recent call last):
File "D:\Anaconda\lib\site-packages\matplotlib\projections\__init__.py", line 58, in get_projection_class
return projection_registry.get_projection_class(projection)
File "D:\Anaconda\lib\site-packages\matplotlib\projections\__init__.py", line 25, in get_projection_class
return self._all_projection_types[name]
KeyError: '3d'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "F:/Carrot_crack_Detection_segmentation/ceshi.py", line 17, in <module>
ax = plt.axes(projection="3d")
File "D:\Anaconda\lib\site-packages\matplotlib\pyplot.py", line 877, in axes
return subplot(111, **kwargs)
File "D:\Anaconda\lib\site-packages\matplotlib\pyplot.py", line 1076, in subplot
a = fig.add_subplot(*args, **kwargs)
File "D:\Anaconda\lib\site-packages\matplotlib\figure.py", line 1396, in add_subplot
self._process_projection_requirements(*args, **kwargs)
File "D:\Anaconda\lib\site-packages\matplotlib\figure.py", line 1120, in _process_projection_requirements
projection_class = projections.get_projection_class(projection)
File "D:\Anaconda\lib\site-packages\matplotlib\projections\__init__.py", line 60, in get_projection_class
raise ValueError("Unknown projection %r" % projection)
ValueError: Unknown projection '3d'
Process finished with exit code 1
运行结果
cmap=‘hot’模式下的效果
cmap='gist_rainbow’下的显示效果