作者art1 (人,原来不是人)
看板Python
标题Re: [问题] 如何缩小图片尺寸以移除图片空白的部份
时间Tue Nov 24 23:09:12 2020
※ 引述《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)
拿去跟回圈版本跑出来的结果比对後,结果是正确的,看起来也优雅多了
--
「看在上帝的份上,我们不能当着孩子的面枪杀他的父亲!」
「那我们就连孩子一起干掉!」
「第一枪打中的是那个天真的孩子,第二枪是抱着孩子的母亲。第三枪
停顿了三秒,当难以致信的父亲擦拭着脸上爱子的脑浆从震惊中醒转
过来,慢慢的转头看向停车的地方,分辨出是谁在攻击他後,第三颗
子弹才将他的脑壳打飞。」 ─摘自〈狼群〉
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 218.173.15.36 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1606230555.A.97A.html