看板 Python 關於我們 聯絡資訊
※ 引述《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://www.ptt.cc/bbs/Python/M.1606230555.A.97A.html