You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写代码自动测量二值图像中黑色区域的纵向像素长度?

分割后的黑白图像

自动测量黑色区域垂直长度的实现思路

核心步骤

  • 图像预处理

    1. 读取图像后转为灰度图(若原图像为彩色),再通过二值化明确区分黑、白区域,确保黑色区域像素值统一(比如设为0或255,可根据实际图像调整阈值)。
    2. 若图像存在噪声,可通过腐蚀、膨胀等形态学操作去除小干扰点,避免影响边界检测精度。
  • 定位黑色区域边界

    1. 提取所有黑色像素的坐标,从中筛选出最小行号(黑色区域的顶部)和最大行号(黑色区域的最低点)。
    2. 垂直长度计算公式为:最大行号 - 最小行号 + 1(包含首尾像素,符合像素计数逻辑)。
  • 特殊情况处理
    若图像存在多个黑色区域,可通过连通域分析(如OpenCV的cv2.connectedComponentsWithStats)筛选出面积最大的连通域,仅针对目标区域计算长度,避免误判。

  • 批量处理
    遍历目标文件夹内的所有图像,循环执行上述步骤,将每个图像的测量结果保存至CSV或其他格式文件,实现自动化批量计算。

示例代码(Python + OpenCV)

import cv2
import numpy as np
import os

def calculate_black_length(img_path):
    # 读取灰度图像
    img = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)
    if img is None:
        return None
    
    # 二值化:将黑色区域转为255,白色转为0(根据实际图像调整阈值)
    _, binary = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY_INV)
    
    # 获取所有黑色像素的坐标
    black_coords = np.where(binary == 255)
    if len(black_coords[0]) == 0:
        return 0
    
    # 计算顶部和底部行号
    top_y = np.min(black_coords[0])
    bottom_y = np.max(black_coords[0])
    return bottom_y - top_y + 1

# 批量处理示例
input_dir = "./segmented_images"
results = []
for filename in os.listdir(input_dir):
    if filename.endswith(('.png', '.jpg', '.jpeg')):
        path = os.path.join(input_dir, filename)
        length = calculate_black_length(path)
        results.append((filename, length))

# 保存结果到CSV
with open("measurement_results.csv", "w") as f:
    f.write("filename,length_pixels\n")
    for item in results:
        f.write(f"{item[0]},{item[1]}\n")

内容的提问来源于stack exchange,提问作者abdullah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 04:10:21