Python+OpenCV绘制多instance的Mask图像

 更新时间:2022年06月08日 14:03:23   作者:SpikeKing  
Mask图像中,不同值表示不同的实例(instance)。本文将详细为大家讲讲如何利用OpenCV绘制多instance的Mask图像,感兴趣的可以学习一下

目标:Mask中,不同值表示不同的实例(instance),在原图中,绘制不同的instance实例,每个实例用不同颜色表示,实例边界用白色表示。

源码:

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绘制多instance的Mask图像的详细内容,更多关于Python OpenCV Mask图像的资料请关注脚本之家其它相关文章!

相关文章

  • python使用pyecharts绘制简单的折线图

    python使用pyecharts绘制简单的折线图

    这篇文章讲给大家介绍一下python使用pyecharts绘制简单的折线图的党法步骤,文中有详细的代码示例讲解,对我们学习或工作有一定的帮助,需要的朋友可以参考下
    2023-07-07
  • 用tensorflow搭建CNN的方法

    用tensorflow搭建CNN的方法

    本篇文章主要介绍了用tensorflow搭建CNN的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • python中的flask框架Jinja 模板入门教程

    python中的flask框架Jinja 模板入门教程

    这篇文章主要介绍了 python中的flask框架Jinja 模板入门,Jinja 模板其实是 html 文件,一般情况下放在 Flask 工程的 /templates 目录下,对python flask Jinja 模板相关知识感兴趣的朋友一起看看吧
    2022-04-04
  • python的列表List求均值和中位数实例

    python的列表List求均值和中位数实例

    这篇文章主要介绍了python的列表List求均值和中位数实例,具有很好对参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • Python单元测试简单示例

    Python单元测试简单示例

    这篇文章主要介绍了Python单元测试,结合实例形式分析了Python单元测试的简单定义、使用方法及相关操作注意事项,需要的朋友可以参考下
    2018-07-07
  • python机器学习算法与数据降维分析详解

    python机器学习算法与数据降维分析详解

    这篇文章主要为大家介绍了python机器学习算法与数据降维的分析详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-11-11
  • 对numpy Array [: ,] 的取值方法详解

    对numpy Array [: ,] 的取值方法详解

    今天小编就为大家分享一篇对numpy Array [: ,] 的取值方法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Python列表的深复制和浅复制示例详解

    Python列表的深复制和浅复制示例详解

    这篇文章主要给大家介绍了关于Python列表的深复制和浅复制的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • python爬虫破解字体加密案例详解

    python爬虫破解字体加密案例详解

    这篇文章主要介绍了python爬虫破解字体加密案例详解,本文通过图文实例相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • python实现LRU热点缓存及原理

    python实现LRU热点缓存及原理

    LRU算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。 。这篇文章主要介绍了python实现LRU热点缓存,需要的朋友可以参考下
    2019-10-10

最新评论