如何创建具有整数值的 Numpy 数组? (当前版本不适用于 getpixel)
How to create a Numpy array with integer values? (current version doesn't work with getpixel)
我正在使用 PIL 从图片的每个像素获取红色值。但是,我需要所有值都在 numpy 数组中,因为据我所知,这是使用颜色图绘制 3D 图形的唯一方法。
问题是当我尝试使用 getpixel()
查找所需的红色值时,出现以下错误:
Traceback (most recent call last):
File "C:\Users\Elitebook\Desktop\PIL\Smoke\get_data_smoke.py", line 14, in <module>
Z=im_rgb.getpixel((X,Y))[0]
File "C:\Users\Elitebook\AppData\Roaming\Python\Python37\site-packages\PIL\Image.py", line 1436, in getpixel
return self.im.getpixel(xy)
TypeError: an integer is required
到目前为止,我已经尝试使用 x=x.astype(int)
和 dtype
来获取整数值,但其中 none 有效。
这是我的代码:
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d
im=Image.open("smoke.jpg")
im_rgb=im.convert("RGB")
w,h=im.size
x=np.arange(1,w+1,1)
y=np.arange(1,h+1,1)
X,Y=np.meshgrid(x,y)
Z=im_rgb.getpixel((X,Y))[0]
fig=plt.figure()
ax=fig.add_subplot(projection='3d')
ax.plot(X,Y,Z)
plt.show()
你的问题是 getpixel
需要一个整数序列。您的输入 X
和 Y
是数组。因此,您需要某种形式的循环来提取各个索引:
x = np.arange(1,w+1,1)
y = np.arange(1,h+1,1)
X,Y = np.meshgrid(x,y)
Z = []
for i,j in zip(X,Y):
for ii, jj in zip(i,j):
Z.append(im_rgb.getpixel((int(ii),int(jj))))
如果你想要图像作为 Numpy 数组,只需使用:
na = np.array(im_rgb)
顺便说一下,将 Numpy 数组转回 PIL Image
的逆向操作是:
pilImage = Image.fromarray(na)
我正在使用 PIL 从图片的每个像素获取红色值。但是,我需要所有值都在 numpy 数组中,因为据我所知,这是使用颜色图绘制 3D 图形的唯一方法。
问题是当我尝试使用 getpixel()
查找所需的红色值时,出现以下错误:
Traceback (most recent call last):
File "C:\Users\Elitebook\Desktop\PIL\Smoke\get_data_smoke.py", line 14, in <module>
Z=im_rgb.getpixel((X,Y))[0]
File "C:\Users\Elitebook\AppData\Roaming\Python\Python37\site-packages\PIL\Image.py", line 1436, in getpixel
return self.im.getpixel(xy)
TypeError: an integer is required
到目前为止,我已经尝试使用 x=x.astype(int)
和 dtype
来获取整数值,但其中 none 有效。
这是我的代码:
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d
im=Image.open("smoke.jpg")
im_rgb=im.convert("RGB")
w,h=im.size
x=np.arange(1,w+1,1)
y=np.arange(1,h+1,1)
X,Y=np.meshgrid(x,y)
Z=im_rgb.getpixel((X,Y))[0]
fig=plt.figure()
ax=fig.add_subplot(projection='3d')
ax.plot(X,Y,Z)
plt.show()
你的问题是 getpixel
需要一个整数序列。您的输入 X
和 Y
是数组。因此,您需要某种形式的循环来提取各个索引:
x = np.arange(1,w+1,1)
y = np.arange(1,h+1,1)
X,Y = np.meshgrid(x,y)
Z = []
for i,j in zip(X,Y):
for ii, jj in zip(i,j):
Z.append(im_rgb.getpixel((int(ii),int(jj))))
如果你想要图像作为 Numpy 数组,只需使用:
na = np.array(im_rgb)
顺便说一下,将 Numpy 数组转回 PIL Image
的逆向操作是:
pilImage = Image.fromarray(na)