python上的以下裁剪功能将如何使用numpy裁剪图像?

时间:2017-09-02 06:27:09

标签: python numpy machine-learning

在下面的函数imcrop_tosquare中。 假设我有一个形状的图像(8,4) 即8行4列。 如果是这样的话。我会得到额外的4。 然后extra%2 ==0条件得到满足。

crop = img[2:-2,:]

2到-2代表什么? 我假设它是从第2行到它之前的行。 1,2,3,4,5,6,7,8 [这将在循环中]因此-1将是1而-2将是2。 如果将前两行结束,图像是否会被损坏? 我错误地解释了吗?任何人都可以指导我理解这一点。

def imcrop_tosquare(img):
"""Make any image a square image.

Parameters
----------
img : np.ndarray
    Input image to crop, assumed at least 2d.

Returns
-------
crop : np.ndarray
    Cropped image.
"""
  if img.shape[0] > img.shape[1]:
    extra = (img.shape[0] - img.shape[1])
    if extra % 2 == 0:
        crop = img[extra // 2:-extra // 2, :]
    else:
        crop = img[max(0, extra // 2 + 1):min(-1, -(extra // 2)), :]
  elif img.shape[1] > img.shape[0]:
    extra = (img.shape[1] - img.shape[0])
    if extra % 2 == 0:
        crop = img[:, extra // 2:-extra // 2]
    else:
        crop = img[:, max(0, extra // 2 + 1):min(-1, -(extra // 2))]
  else:
    print("It is imgae")
    crop = img
  return crop

1 个答案:

答案 0 :(得分:1)

根据documentation

  

负i和j被解释为n + i和n + j,其中n是相应维度中元素的数量。

因此,如果您的数组中有8行,则containers将表示crop = img[2:-2,:]