如何抓出遮罩中ROI的外框,并视觉化呈现 - cv2.findContours 和 cv2.boundingRect 的

前言

最近正好在处理医学影像,拿到的资料是医师圈好病灶位置的影像遮罩(mask),希望能够抓出病灶区域的外框 (bounding box) 当作训练资讯,而病灶区域也就是这边的ROI(region of interest)。

方法

主要使用到的是 opencv 里面的函数:cv2.findContourscv2.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))

结果

如果有任何问题欢迎留言讨论~
这篇分享的资讯如果对你有帮助,也欢迎按讚、留言让我知道~

参考资料&补充

设定矩形绘製出来的样式:matplotlib.patches.RectangleMatplotlib 颜色选择:List of named colorsOpenCV 学习笔记03 boundingRect、minAreaRect、minEnclosingCircle 函数的用法

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章