我正在使用Python和Numpy拍摄几个相同像素尺寸的图像并创建一个2D数组,因此数组的每一行代表一个图像,每列代表某个位置的像素。
为实现这一点,我已经阅读了图像文件,并尝试使用numpy.concatenate。代码是
#url of picture data
X_p = data.link
#list for storing the picture data
X= []
#read in the image from the url, and skip poster with 404 error
for url in X_p:
try:
loadimg = urllib.request.urlopen(url)
image_file = io.BytesIO(loadimg.read())
img = Image.open(image_file)
#Concatenate to linearize
X.append(np.concatenate(np.array(img)))
#404 error
except urllib.error.HTTPError as err:
if err.code == 404:
continue
else:
raise
#cast the list into numpy array
X = np.array(X)
#test to see if X is in correct dimension
print(X.shape)
我运行了这段代码,X的形状每次都以这种格式出现
(图像数量,高度X宽度,3)
例如,如果我加载了200个200x200像素的12个图像网址,结果就是(12,40000,3)
我需要的是在最后摆脱3,当我甚至不知道3来自哪里时很难。
我认为我遇到的问题是在错误的地方追加或连接。当我删除np.concatenate时,它只是显示(12,200,200,3)。
我在线搜索了numpy图像处理和连接,但我没有碰到任何可以解释和修复正在发生的事情。
感谢任何和所有帮助。提前感谢您花时间阅读这篇文章并回答..
答案 0 :(得分:0)
我弄明白了这个问题。我对我的数组的维度感到好奇,所以我搜索SO以寻找递增或递减1维的问题。我跑过一个帖子,解释了3代表的内容。
How can I save 3D array results to a 4D array in Python/numpy?
Image.open().convert("L")
对我不起作用,所以我不得不使用一个技巧
with Image.open().convert("L") as img
我在for循环后添加了这一行,并且修复了维度问题。