在python中使用array.split()方法后如何使用数组的splitted子数组?

时间:2014-04-21 20:10:40

标签: python arrays numpy

  1. 我想将我的图片转换为numpy数组
  2. 然后将此数组拆分为两个数组(以便左半部分图像转到一个数组,右半部分转换为另一个数组)。
  3. 我想计算这两个数组的非零元素,并相互比较并给出一个布尔输出。
  4. 我无法弄清楚如何使用这两个数组以便我可以计算每个数组的这些非零元素

    以下是我的代码:

    from PIL import Image
    import numpy as np
    
    Image = Image.open('myimage.jpg')
    array = np.array(Image)
    split = np.split(array,2,0)      //code is working fine until this point
    

1 个答案:

答案 0 :(得分:1)

当你使用np.split(array, 2, 0)时,你将它垂直分成两个数组,这样你就可以得到上半部分和下半部分。您希望沿轴1拆分以左右移动:np.split(array, 2, 1)

其次,如果你分成两个,np.split会返回两个数组,并且它们存储在一个列表中。如果您想要第一个,请使用split[0],如果您想要第二个,请使用split[1],或者如果您想立即解压缩它们:

left, right = np.split(array, 2, 1)

现在,要计算非零元素,你必须更仔细地定义“元素”,因为jpg图像每个像素有三个元素。如果你想要元素,只需使用:

lcount = np.count_nonzero(left)

如果你想要像素,你必须以某种方式转换为灰度。这是一种方式:

grey = np.asarray(im.convert('L'))
lgray, rgray = np.split(grey, 2, 1)
lcount = np.count_nonzero(lgrey)

我也会稍微改写一下,因为你不想使用Image,因为那已经是PIL模块的名称了:

from PIL import Image
import numpy as np

im = Image.open('myimage.jpg')  # don't name something Image, the module is Image.
arr = np.array(im)
left, right = np.split(arr, 2, 1)