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图像的资料请关注脚本之家其它相关文章!

相关文章

  • pandas实现excel中的数据透视表和Vlookup函数功能代码

    pandas实现excel中的数据透视表和Vlookup函数功能代码

    今天小编就为大家分享一篇pandas实现excel中的数据透视表和Vlookup函数功能代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • 详解python的函数递归与调用

    详解python的函数递归与调用

    Python中的函数递归是一种函数调用自身的编程技术,递归可以用来解决问题,特别是那些可以分解为更小、相似子问题的问题,本文将给大家详细的讲解一下python的函数递归与调用,需要的朋友可以参考下
    2023-10-10
  • Django中的session用法详解

    Django中的session用法详解

    这篇文章主要介绍了Django中的session用法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • 一个Python案例带你掌握xpath数据解析方法

    一个Python案例带你掌握xpath数据解析方法

    xpath解析是最常用且最便捷高效的一种解析方式,通用性强。本文将通过一个Python爬虫案例带你详细了解一下xpath数据解析方法,需要的可以参考一下
    2022-02-02
  • Pandas读取并修改excel的示例代码

    Pandas读取并修改excel的示例代码

    这篇文章主要介绍了Pandas读取并修改excel的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-02-02
  • Python 函数绘图及函数图像微分与积分

    Python 函数绘图及函数图像微分与积分

    今天小编就为大家分享一篇Python 函数绘图及函数图像微分与积分,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • flask上使用websocket的方法示例

    flask上使用websocket的方法示例

    本文主要介绍了flask上使用websocket的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • Python使用pycharm导入pymysql教程

    Python使用pycharm导入pymysql教程

    这篇文章主要介绍了Python使用pycharm导入pymysql教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • python爬虫将js转化成json实现示例

    python爬虫将js转化成json实现示例

    这篇文章主要为大家介绍了python爬虫将js转化成json实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • python+pygame简单画板实现代码实例

    python+pygame简单画板实现代码实例

    这篇文章主要介绍了python+pygame简单画板实现代码实例,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12

最新评论