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

发布时间:2024年01月18日
  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实现了对语义分割结果的后处理和可视化,标记了轮廓、中心点和重心。用户可以根据实际需求调整阈值和颜色,以获得更符合自己应用场景的可视化效果。

文章来源:https://blog.csdn.net/hasque2019/article/details/135669105
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。