我应该如何绘制 XYZ 数据点以在 python 中创建 RGB 深度图像
How should I plot XYZ data points to create a depth image in RGB in python
我正在做一个小项目,在这个项目中我得到了 XYZ 数据的二维数组。这样的事情:
a = [[1,7,13,3,4],
[6,21,32,11,2]]
其中x代表数组的列,y代表数组的行,z代表数组的内容,也就是距离。我想要完成的是使用二维数组并在 RGB 中绘制深度图像。详细说明,距离 (z) 值越近,我希望该点被绘制为红色。随着距离 (z) 值的增加,我想根据距离的大小将其绘制为黄色、绿色或蓝色。
为了更好地说明,我添加了示例图片。
我正试图在 python 中完成此任务。我尝试研究它,但大多数时候我发现如何从深度图像或点云中提取 XYZ 数据,而不是使用 XYZ 数据绘制深度图像。
请告诉我这是否可行,或者有哪些 python 库可用于实现此目的。
谢谢。
编辑:我相信注意到二维阵列由测距仪传感器生成的点云数据组成可能会有所帮助。我希望能够使用数据点构建扫描区域的静态二维图像。我还想使用颜色图来可视化图像的深度。
类似这样的东西?
from matplotlib.pylab import plt
a = [[1,7,13,3,4],
[6,21,32,11,2]]
plt.matshow(a, cmap=plt.cm.viridis)
plt.colorbar()
您可以传递大型数组,例如图像。在这里,我使用来自 matplotlib 的示例图像,我剪辑颜色以获得 (120, 560) 而不是 (120, 560, 3) 数组,然后显示它:
from matplotlib.pylab import plt
from matplotlib.cbook import get_sample_data
fn = get_sample_data("logo2.png", asfileobj=False)
img = plt.imread(fn, format='png')[...,0] #get single color channel
plt.matshow(img,cmap=plt.cm.jet,interpolation='bicubic')#see imshow for more arguments
plt.colorbar()
如果我没记错的话plt.matshow是plt.imshow
的子类
这是一个使用 seaborn
的例子:
正在生成示例数据:
pip install seaborn # for those who have not yet installed seaborn
---
AND
---
import seaborn as sns
def func(x, y):
return np.exp(-x**2-y**2)
xaxis = np.linspace(-1, 1, 100)
yaxis = np.linspace(-1, 1, 200)
result = func(xaxis[:,None], yaxis[None,:])
绘图:
sns.heatmap(result, cmap=sns.color_palette("Spectral_r", as_cmap=True))
plt.yticks([],[])
plt.xticks([],[])
结果:
我正在做一个小项目,在这个项目中我得到了 XYZ 数据的二维数组。这样的事情:
a = [[1,7,13,3,4],
[6,21,32,11,2]]
其中x代表数组的列,y代表数组的行,z代表数组的内容,也就是距离。我想要完成的是使用二维数组并在 RGB 中绘制深度图像。详细说明,距离 (z) 值越近,我希望该点被绘制为红色。随着距离 (z) 值的增加,我想根据距离的大小将其绘制为黄色、绿色或蓝色。
为了更好地说明,我添加了示例图片。
我正试图在 python 中完成此任务。我尝试研究它,但大多数时候我发现如何从深度图像或点云中提取 XYZ 数据,而不是使用 XYZ 数据绘制深度图像。
请告诉我这是否可行,或者有哪些 python 库可用于实现此目的。
谢谢。
编辑:我相信注意到二维阵列由测距仪传感器生成的点云数据组成可能会有所帮助。我希望能够使用数据点构建扫描区域的静态二维图像。我还想使用颜色图来可视化图像的深度。
类似这样的东西?
from matplotlib.pylab import plt
a = [[1,7,13,3,4],
[6,21,32,11,2]]
plt.matshow(a, cmap=plt.cm.viridis)
plt.colorbar()
您可以传递大型数组,例如图像。在这里,我使用来自 matplotlib 的示例图像,我剪辑颜色以获得 (120, 560) 而不是 (120, 560, 3) 数组,然后显示它:
from matplotlib.pylab import plt
from matplotlib.cbook import get_sample_data
fn = get_sample_data("logo2.png", asfileobj=False)
img = plt.imread(fn, format='png')[...,0] #get single color channel
plt.matshow(img,cmap=plt.cm.jet,interpolation='bicubic')#see imshow for more arguments
plt.colorbar()
如果我没记错的话plt.matshow是plt.imshow
的子类这是一个使用 seaborn
的例子:
正在生成示例数据:
pip install seaborn # for those who have not yet installed seaborn
---
AND
---
import seaborn as sns
def func(x, y):
return np.exp(-x**2-y**2)
xaxis = np.linspace(-1, 1, 100)
yaxis = np.linspace(-1, 1, 200)
result = func(xaxis[:,None], yaxis[None,:])
绘图:
sns.heatmap(result, cmap=sns.color_palette("Spectral_r", as_cmap=True))
plt.yticks([],[])
plt.xticks([],[])
结果: