前言
最近正好在处理医学影像,拿到的资料是医师圈好病灶位置的影像遮罩(mask),希望能够抓出病灶区域的外框 (bounding box) 当作训练资讯,而病灶区域也就是这边的ROI(region of interest)。
方法
主要使用到的是 opencv 里面的函数:cv2.findContours
和 cv2.boundingRect
这边另外应用到 d2l 套件中的 axes.add_patch
在原本的图像上另外画出东西
程式码
import cv2import 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))
结果
如果有任何问题欢迎留言讨论~
这篇分享的资讯如果对你有帮助,也欢迎按讚、留言让我知道~