Python+OpenCV实现多实例Mask图像绘制与边界高亮

宋时安
宋时安
发布时间:2026-10-15| 4人浏览过
原创

本文介绍如何使用Python和OpenCV库在原始图像上绘制多实例Mask。通过为不同实例分配随机颜色,并提取Mask边界以白色线条高亮显示,实现清晰的实例区分。代码包含生成随机颜色列表、拆分Mask层、绘制填充区域及提取轮廓绘制白色边界的完整流程,适用于目标检测与分割任务的可视化展示。

多实例Mask绘制目标与原理

本示例的目标是在原始图像上绘制多实例(instance)的Mask图像。具体要求为:Mask中不同的数值代表不同的实例,在原始图像中,每个实例需以不同的颜色进行填充显示,同时所有实例的边界需用白色线条标出。

实现该功能的核心源码如下:

核心代码实现:颜色生成与边界绘制

def generate_colors(n_colors, seed=47):
    """
    随机生成颜色
    """
    np.random.seed(seed)
    color_list = []
    for i in range(n_colors):
        color = (np.random.random((1, 3)) * 0.8).tolist()[0]
        color = [int(j * 255) for j in color]
        color_list.append(color)

    return color_list

def draw_mask_layers(image, mask_layers, mask_tk=1):
    """
    绘制多层的mask,包含mask的边界,mask中不同值表示不同的instance
    :param image: 3通道图像
    :param mask_layers: 多instance的mask
    :param mask_tk: 边界的厚度
    :return: 绘制边界框
    """
    img_copy = copy.copy(image)

    # 拆分Mask
    h, w = mask_layers.shape[:2]
    mask_id = np.unique(mask_layers)[1:]  # 获取Mask的ID, 0是背景
    masks = []
    for i in mask_id:
        m = np.zeros((h, w), dtype=bool)
        m[mask_layers == i] = True
        masks.append(m)

    # 绘制颜色区域
    color_list = generate_colors(len(masks))
    for idx, mask in enumerate(masks):
        img_copy[mask] = color_list[idx]  # 绘制颜色框

    image = cv2.addWeighted(image, 0.5, img_copy, 0.5, 0)  # 合并mask

    # 绘制边界,边界不需要透视效果
    for idx, mask in enumerate(masks):
        cnt_mask = np.zeros((h, w))
        cnt_mask[mask] = 255
        cnt_mask = cnt_mask.astype(np.uint8)
        contours, _ = cv2.findContours(cnt_mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
        cv2.drawContours(image, contours, -1, (255, 255, 255), mask_tk)  # 绘制白色边界

    return image

处理前的原始图像示例:

生成的Mask图像示例:

以上即为利用Python结合OpenCV绘制多实例Mask图像的完整实现。如需了解更多关于Python和OpenCV处理Mask图像的技术细节,建议参考本站发布的相关技术文章。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。