优化cv2.findContours()函数提取的目标边界点,使语义分割进行远监督辅助标注

简介: 可以看到cv2.findContours()函数可以将目标的所有边界点都进行导出来,但是他的点存在一个问题,太过密集,如果我们想将语义分割的结果重新导出成labelme格式的json文件进行修正时,这就会存在点太密集没有办法进行修改,这里展示一个示例:没有对导出的结果进行修正,在labelme中的效果图。

优化cv2.findContours()函数提取的目标边界点


假设我们想要提取的目标边界长这样:


1cb97ad274f445798a0bc39f22b0937b.png


我们先使用以下代码查看效果


import cv2
import numpy as np
import os
if __name__ == '__main__':
    # 图像可以选择自己的
    image_filepath = './landslide/image/20221129112713.png'
    # 读取图像
    image = cv2.imread(image_filepath)
    # 转化为灰度图像
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    cv2.imshow('gray', gray)
    cv2.waitKey(0)
    # 提取轮廓,重要的是contours这个数组类型
    contours, hierarchy = cv2.findContours(gray, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
    for i in range(len(contours)):
        # 每一次对一个轮廓进行描边,描边的颜色为color参数,轮廓的索引值为i
        new_image = cv2.drawContours(image, contours, i, color=[0, 0, 255])
        cv2.imshow('new_image', new_image)
        cv2.waitKey(0)


可以看到cv2.findContours()函数可以将目标的所有边界点都进行导出来,但是他的点存在一个问题,太过密集,如果我们想将语义分割的结果重新导出成labelme格式的json文件进行修正时,这就会存在点太密集没有办法进行修改,这里展示一个示例:没有对导出的结果进行修正,在labelme中的效果图。


8d97b478fa114843af92ac19961b88a9.png


可以看到这里直接导出的点太过于密集,需要对其进行一个优化,否则难以直接使用labelme进行修正。


优化的思想可以使用一些优化算法对密集的点进行删除,网上都有一些教程。


这里我们提供我们转化后的一个效果图:


416128b373324788b46b38023c65e664.png


目前这个点的密集程度已经大大减少,基本上已经接近人工在labelme软件上标注的效果。


创作不易,可以通过这个链接下载代码,如果存在问题可以私信我下载链接

如果对您有帮助可以点👍哦

目录
相关文章
|
存储 计算机视觉 开发者
【mobileSam】使用大模型推理赋能标注工作,让标注工作不再困难
【mobileSam】使用大模型推理赋能标注工作,让标注工作不再困难
1119 1
github项目文件大小查看方法
github项目文件大小查看方法
3345 1
github项目文件大小查看方法
|
计算机视觉 Python
OpenCV中拆分通道、合并通道、alpha通道的讲解及实战演示(附python源码 超详细)
OpenCV中拆分通道、合并通道、alpha通道的讲解及实战演示(附python源码 超详细)
1543 0
|
存储 缓存 前端开发
关于JWT Token 自动续期的解决方案
在前后端分离的开发模式下,前端用户登录成功后后端服务会给用户颁发一个jwt token。前端(如vue)在接收到jwt token后会将token存储到LocalStorage中。
2131 0
|
10月前
|
人工智能 自然语言处理 Java
面向 Java 开发者:2024 最新技术栈下 Java 与 AI/ML 融合的实操详尽指南
Java与AI/ML融合实践指南:2024技术栈实战 本文提供了Java与AI/ML融合的实操指南,基于2024年最新技术栈(Java 21、DJL 0.27.0、Spring Boot 3.2等)。主要内容包括: 环境配置:详细说明Java 21、Maven依赖和核心技术组件的安装步骤 图像分类服务:通过Spring Boot集成ResNet-50模型,实现REST接口图像分类功能 智能问答系统:展示基于RAG架构的文档处理与向量检索实现 性能优化:利用虚拟线程、GraalVM等新技术提升AI服务性能 文
899 0
|
计算机视觉
【CV大模型SAM(Segment-Anything)】如何保存分割后的对象mask?并提取mask对应的图片区域?
【CV大模型SAM(Segment-Anything)】如何保存分割后的对象mask?并提取mask对应的图片区域?
【CV大模型SAM(Segment-Anything)】如何保存分割后的对象mask?并提取mask对应的图片区域?
|
计算机视觉
OpenCV(二十八):连通域分割
OpenCV(二十八):连通域分割
1094 0
|
数据可视化 计算机视觉 Python
使用Albumentations 对关键点 做增强
使用Albumentations 对关键点 做增强
842 0
使用Albumentations 对关键点 做增强
|
SQL Oracle 算法
Mybatis: 兼容Oracle数据库批量插入语句
当前项目需要在不同环境下部署,不同环境下有不同的数据库,有pg、oracle、mysql等,项目中的所有sql均为pg数据库相关的sql,由于oracle数据库比较特殊所以需要兼容相关的sql。批量插入的语句,pg和oracle有着较大的差别,不能同一条语句兼顾两种数据库:,所以需要查找方案来解决。
1452 0
|
安全 API 数据安全/隐私保护
邮箱API提取邮件验证码技巧
本文介绍了如何高效提取和管理邮件验证码,涉及邮箱API原理、选择合适API、正确参数调用、安全处理、异常处理、应用场景及优化方法。注意遵守法律法规,保障用户隐私安全。