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