语义分割结果后处理与可视化:轮廓、中心点和重心标记

  1. 目标
    介绍一个用于语义分割后处理和可视化的Python脚本。该脚本通过OpenCV库实现,可以在图像中标记出分割区域的轮廓、中心点和重心,以提供更直观的视觉反馈
import cv2
import numpy as np

filename = './mask/3.png'
# 读取灰度图像
gray_image = cv2.imread(filename, cv2.IMREAD_GRAYSCALE)

# 使用适当的阈值将图像转换为二值图像
_, binary_image = cv2.threshold(gray_image, 128, 255, cv2.THRESH_BINARY)

# 寻找分割区域的轮廓
contours, _ = cv2.findContours(binary_image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 检查是否找到至少一个有效轮廓
if contours:
    # 创建与输入图像相同大小的彩色图像(白色背景)
    segmentation_image = np.zeros((gray_image.shape[0], gray_image.shape[1], 3), dtype=np.uint8)
    segmentation_image[:, :] = (255, 255, 255)  # 白色背景

    # 遍历每个轮廓
    for contour in contours:
        # 计算轮廓的边界框
        x, y, w, h = cv2.boundingRect(contour)

        # 计算边界框的中心点
        center_x = x + w // 2
        center_y = y + h // 2

        # 计算轮廓的重心
        M = cv2.moments(contour)
        if M["m00"] != 0:
            centroid_x = int(M["m10"] / M["m00"])
            centroid_y = int(M["m01"] / M["m00"])

            # 在图像上绘制中心点和重心(红色和黄色)
            cv2.circle(segmentation_image, (center_x, center_y), 10, (0, 0, 255), -1)  # 红色
            cv2.circle(segmentation_image, (centroid_x, centroid_y), 5, (0, 255, 255), -1)  # 黄色

            # 绘制轮廓区域(蓝色)
            cv2.drawContours(segmentation_image, [contour], 0, (255, 0, 0), 1)

    # 显示结果图像
    cv2.imshow('Segmentation with Contours, Centers, and Centroids', segmentation_image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
else:
    print("Error: No valid contours found.")

参数解释

filename: 输入图像的文件路径。
gray_image: 读取的灰度图像。
binary_image: 通过阈值处理生成的二值图像。
contours: 通过轮廓检测得到的轮廓信息。
segmentation_image: 结果可视化。

结论

该脚本通过OpenCV实现了对语义分割结果的后处理和可视化,标记了轮廓、中心点和重心。用户可以根据实际需求调整阈值和颜色,以获得更符合自己应用场景的可视化效果。

  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

VisionX Lab

你的鼓励将是我更新的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值