iT邦幫忙

0

如何抓出遮罩中ROI的外框,並視覺化呈現 - cv2.findContours 和 cv2.boundingRect 的應用

前言

最近正好在處理醫學影像,拿到的資料是醫師圈好病灶位置的影像遮罩(mask),希望能夠抓出病灶區域的外框 (bounding box) 當作訓練資訊,而病灶區域也就是這邊的ROI(region of interest)。

方法

主要使用到的是 opencv 裡面的函數:cv2.findContourscv2.boundingRect
這邊另外應用到 d2l 套件中的 axes.add_patch 在原本的圖像上另外畫出東西

程式碼

import cv2
import d2l

# 設定輸入的影像路徑,並讀檔
path = "path to the mask in .png format"
mask = cv2.imread(path, cv2.IMREAD_GRAYSCALE)

# cv2.findContours: 找到ROI的輪廓
contours, hierarchy = cv2.findContours(mask, cv2.RETR_EXTERNAL,
                      cv2.CHAIN_APPROX_SIMPLE)

color = ['red', 'green']
fig = d2l.plt.imshow(mask, cmap='gray')
for i in range(0, len(contours)):

    # cv2.boundingRect: 透過輪廓找到外接矩形
    # 輸出:(x, y)矩形左上角座標、w 矩形寬(x軸方向)、h 矩形高(y軸方向)
    x, y, w, h = cv2.boundingRect(contours[i])
    
    # 在原影像上繪製出矩形
    fig.axes.add_patch(d2l.plt.Rectangle((x, y), w, h, fill=False,
                       linestyle="-", edgecolor=color[i],
                       linewidth=2))

結果

如果有任何問題歡迎留言討論~
這篇分享的資訊如果對你有幫助,也歡迎按讚、留言讓我知道~

參考資料&補充


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言