在numpy数组python中连接图像

时间:2017-09-15 21:11:57

标签: python-3.x numpy image-processing multidimensional-array

我正在使用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图像处理和连接,但我没有碰到任何可以解释和修复正在发生的事情。

感谢任何和所有帮助。提前感谢您花时间阅读这篇文章并回答..

1 个答案:

答案 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循环后添加了这一行,并且修复了维度问题。