Re: [问题] 如何缩小图片尺寸以移除图片空白的部份

楼主: art1 (人,原来不是人)   2020-11-24 23:09:12
※ 引述《art1 (人,原来不是人)》之铭言:
: 一开始以为 cv2.findContours 可以达成我的需求,实际用过后才知道不是
: 目前已经可以做到把图片有图案的部份跟背景完全分开,达到类似套用遮罩的效果
: 但想要更进一步缩小这个遮罩的尺寸,以便让遮罩相当于一个最小的矩型框框住有图案
: 的部份
: 想做这个是因为 skimage.draw 的 random_shapes 函式所产生的随机形状数量如果过少
: ,会出现很大的空白区域,因此希望用一个最小的矩型框把这些随机图案全部框起来
: 直觉上用循环沿着长跟宽方向找有非零值出现的最大与最小索引值就能达成我的需求
: ,但想知道有没有比较优雅的解决方案,例如使用 numpy 的内建函式就能达成呢?
研究了一下 np.nonzero 才发现之前看不懂输出结果的原因,因为它把非零的索引值
拆开各自放在一个阵列里面,要使用比较容易看懂的结果则是改用 np.argwhere,不
过这样的话到时要找最大最小值又要另外指定 axis,所以要找出非零值的最大最小索
引值只需要写这样就好
max_height = np.max(np.nonzero(mask)[0])
min_height = np.min(np.nonzero(mask)[0])
max_width = np.max(np.nonzero(mask)[1])
min_width = np.min(np.nonzero(mask)[1])
mask 的 shape 是(height, width, channels)
拿去跟循环版本跑出来的结果比对后,结果是正确的,看起来也优雅多了

Links booklink

Contact Us: admin [ a t ] ucptt.com