【问题标题】:Python crop image in numpy arraynumpy数组中的Python裁剪图像
【发布时间】:2020-09-06 16:48:41
【问题描述】:

有没有办法通过检测alpha不为0的每一侧的第一个像素来从顶部、底部、左侧、右侧裁剪图像?我以这种格式在 numpy 数组中加载了图像。

非常感谢您的回答!

 [[[105 105 105   0]
  [105 105 105   0]
  [105 105 105   0]
  ...
  [105 105 105   0]
  [105 105 105   0]
  [105 105 105   0]]

 [[105 105 105   0]
  [105 105 105   0]
  [105 105 105   0]
  ...
  [105 105 105   0]
  [105 105 105   0]
  [105 105 105   0]]

 [[105 105 105   0]
  [105 105 105   0]
  [105 105 105   0]
  ...
  [105 105 105   0]
  [105 105 105   0]
  [105 105 105   0]]
  ...

 [[105 105 105   0]
  [105 105 105   0]
  [105 105 105   0]
  ...
  [105 105 105   0]
  [105 105 105   0]
  [105 105 105   0]]]

【问题讨论】:

  • 请提供图片和您当前的尽力而为的代码。

标签: python arrays numpy opencv


【解决方案1】:

我从similar thread 修改了代码以满足您的要求:

def crop_image_outside_based_on_transparency(img, tol=0):
    # img is 3D image data with transparency channel
    # tol is tolerance (0 in your case)
    # we are interested only in the transparency layer so:
    trans_layer = img[:,:,3]
    mask = trans_layer > tol
    m, n = trans_layer.shape
    mask0, mask1 = mask.any(0), mask.any(1)
    col_start,col_end = mask0.argmax(),n-mask0[::-1].argmax()
    row_start,row_end = mask1.argmax(),m-mask1[::-1].argmax()
    return img[row_start:row_end, col_start:col_end, :]

未来注意事项:请提供示例数据,以便我们更轻松地制定解决方案

【讨论】:

  • 非常感谢,它有效!下次我将提供更多信息,很抱歉,但我是这个门户的新贡献者,我不知道这里的东西。祝你有美好的一天,谢谢!
  • 没问题 - 欢迎加入社区! :) 如果您可以将我的帖子标记为正确答案,如果它对您有用,那就太好了,谢谢!
猜你喜欢
  • 2017-04-25
  • 1970-01-01
  • 1970-01-01
  • 2014-04-29
  • 2017-06-14
  • 2010-10-10
  • 2017-01-15
  • 1970-01-01
相关资源
最近更新 更多