gpt4 book ai didi

python - 图像坐标值

转载 作者:太空宇宙 更新时间:2023-11-04 03:14:05 24 4
gpt4 key购买 nike

我有一个包含测量数据的文本文件,如下所示。

x   y   z
1 3 -2
2 1 -3
3 1 1
2 2 3
1 2 2
2 3 0

这意味着以下测量(在 x,y 网格上)

-2   0
2 3
-3 1

我想根据这些值创建一个图像,其中没有测量值意味着图像是透明的。如果可能的话,我想将 z 值(例如从 -9.4 到 +3.2)映射到颜色图,例如 colormap.jet

我已尝试使用 Python 图像库和 putpixel 来执行此操作,但这非常慢,我相信一定有更好的方法来执行此操作。

我当前的代码: basePath = os.path.dirname(os.path.realpath(file)) #定义当前文件所在目录srcFiles = glob.glob('*.pts')

对于 srcFiles 中的文件名:

data = pd.read_csv(os.path.join(basePath, fileName), names=['x', 'y', 'z'], delim_whitespace=True)

print fileName
maxX = data.x.max()
minX = data.x.min()
maxY = data.y.max()
minY = data.y.min()
minZ = data.z.min()
maxZ = data.z.max()

width = maxX-minX
height = maxY-minY

img = Image.new('L', (int(width), int(height)))


for x in range(int(width)):
for y in range(int(height)):
value = data[(data['x'] == (minX+x)) & (data['y'] == (minY+y))]['z']
if len(value) == 0:
value = 99.;

img.putpixel((x,y),int(value))

img.save('test.png')

最佳答案

也许您应该只使用 numpy 矩阵来处理图像。我没有像您已经拥有的那样执行 csv 读取部分。屏蔽阵列让您拥有透明像素。

import numpy as np
import matplotlib.pyplot as plt

INPUT = np.array(
[[1, 3, -2]
,[2, 1, -3]
,[3, 1, 1]
,[2, 2, 3]
,[1, 2, 2]
,[2, 3, 0]])

# get ranges
xmin = INPUT[:,0].min()
xmax = INPUT[:,0].max()
ymin = INPUT[:,1].min()
ymax = INPUT[:,1].max()
zmin = INPUT[:,2].min()
zmax = INPUT[:,2].max()

# create array for image : zmax+1 is the default value
shape = (xmax-xmin+1,ymax-ymin+1)
img = np.ma.array(np.ones(shape)*(zmax+1))

for inp in INPUT:
img[inp[0]-xmin,inp[1]-ymin]=inp[2]

# set mask on default value
img.mask = (img==zmax+1)

# set a gray background for test
img_bg_test = np.zeros(shape)
cmap_bg_test = plt.get_cmap('gray')
plt.imshow(img_bg_test,cmap=cmap_bg_test,interpolation='none')

# plot
cmap = plt.get_cmap('jet')
plt.imshow(img,cmap=cmap,interpolation='none',vmin=zmin,vmax=zmax)
plt.colorbar()

plt.imsave("test.png",img)
plt.show()
plt.close()

output请注意,imsave 不会保存我在此处显示的图形,而是保存您想要的图像,这对于 3x3 像素不会很有趣。

关于python - 图像坐标值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36910410/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com