视觉图像面积计算

在图像处理和计算机视觉中,计算对象面积的常见方法有两种:使用四邻域标记算法和使用轮廓计算。每种方法在不同情况下有各自的优缺点。

  1. 四邻域标记算法

    • 优点
      • 简单易实现。
      • 能够处理带有孔洞的复杂区域(只要孔洞不影响连通性判断)。
    • 缺点
      • 对于边缘不清晰或有噪声的图像,可能会导致面积计算误差。
      • 依赖于图像分辨率和阈值选择的精度。
  2. 轮廓计算

    • 优点
      • 通常更精确,因为它直接使用对象的边缘来计算面积。
      • 适合处理边界清晰的对象。
      • 可以在亚像素级别计算面积,提供更高精度。
    • 缺点
      • 计算复杂度相对较高,特别是在图像边缘检测和轮廓提取步骤。
      • 对于有噪声的图像,边缘检测可能会失败或产生错误的轮廓。

更准确的选择

通常情况下,使用轮廓计算面积更为准确,特别是在以下情况下:

  • 图像边缘清晰。
  • 需要高精度的面积计算。
  • 可以处理复杂形状和多种连通区域。

分别代码:

1 轮廓

# 获取连通域的边界和标签   # 查看各个轮廓
    contours, _ = cv2.findContours(gray_frame_seg, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    # 筛选出面积较小的轮廓
    option_contours = [cnt for cnt in contours if cv2.contourArea(cnt) > area_threshold]
    logging.info(f'count: {len(contours)}, option contours: {len(option_contours)}')
    # 初始化要计算的参数
    num_contours = len(option_contours)
    areas = np.zeros(num_contours)

2 四邻域标记算法

    def calculate_perimeter():
        """计算连通区域的周长"""
        contours, _ = cv2.findContours(region.astype(np.uint8), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
        perimeter = 0
        for contour in contours:
            perimeter += cv2.arcLength(contour, True)
        return perimeter

    # 找到连通区域并计算每个区域的面积和周长
    labeled_array, num_features = label(gray_frame_seg)
    print(f'labeled_array, num_features:{labeled_array, num_features}')
    areas1 = []
    perimeters1 = []

    # 遍历每个连通区域
    for region_slice in find_objects(labeled_array):
        region = labeled_array[region_slice]
        area = np.sum(region > 0)
        perimeter = calculate_perimeter()
        areas1.append(area)
        perimeters1.append(perimeter)
    print(f'sort areas, len:{len(areas1)}:\n{sorted(areas1)}')
    return areas1, perimeters1

相关推荐

  1. 视觉图像面积计算

    2024-07-11 19:56:04       13 阅读
  2. 图像处理与计算机视觉算法

    2024-07-11 19:56:04       39 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 19:56:04       49 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 19:56:04       53 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 19:56:04       42 阅读
  4. Python语言-面向对象

    2024-07-11 19:56:04       53 阅读

热门阅读

  1. python函数设计(1)

    2024-07-11 19:56:04       15 阅读
  2. 遥感影像图像识别

    2024-07-11 19:56:04       16 阅读
  3. C++:set和map

    2024-07-11 19:56:04       20 阅读
  4. YOLO v8进行目标检测的遇到的bug小结

    2024-07-11 19:56:04       14 阅读
  5. 数据建设实践之数据规范

    2024-07-11 19:56:04       17 阅读
  6. Google订阅补坑

    2024-07-11 19:56:04       20 阅读
  7. 低代码开发在金融系统中的应用研究

    2024-07-11 19:56:04       18 阅读
  8. conda 创建新的虚拟环境报错

    2024-07-11 19:56:04       17 阅读
  9. C++处理json数据注意点(url传递接收json数据)

    2024-07-11 19:56:04       17 阅读
  10. Windows批处理指令与Shell的关系

    2024-07-11 19:56:04       16 阅读
  11. 模电基础 - 直流电源

    2024-07-11 19:56:04       19 阅读
  12. Python魔法函数(Magic Methods简介

    2024-07-11 19:56:04       20 阅读
  13. C语言 输出n阶魔方阵

    2024-07-11 19:56:04       21 阅读
  14. ARM/Linux嵌入式面经(十一):地平线嵌入式实习

    2024-07-11 19:56:04       20 阅读
  15. xss攻击

    2024-07-11 19:56:04       19 阅读