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

如何计算单张图像中多个ROI各自的RGB均值并导出至CSV?

解决RGB图像ROI颜色特征提取与CSV保存问题

问题分析

原代码的核心问题在于ROI分割逻辑错误:逐行扫描像素的方式会把同一建筑的连续像素误判为多个ROI,无法正确识别独立的建筑区域;同时缺少计算RGB整体均值的步骤。

修正方案

使用连通区域分析准确分割每个建筑ROI,再计算每个通道的均值及整体RGB均值,最后保存到CSV。

完整代码

import numpy as np
import pandas as pd
from skimage import io, measure

# 读取图像
image = io.imread("/content/drive/MyDrive/277.png")

# 生成二值掩码:筛选非黑像素区域(背景为纯黑)
mask = np.any(image > 0, axis=2)

# 连通区域分析,标记每个独立ROI
label_image = measure.label(mask)

roi_mean_values = []

# 遍历每个连通区域
for label in np.unique(label_image):
    if label == 0:  # 跳过背景(标签0对应纯黑区域)
        continue
    
    # 获取当前ROI的掩码
    roi_mask = label_image == label
    
    # 提取ROI的所有RGB像素
    roi_pixels = image[roi_mask]
    
    # 计算各通道均值
    mean_r = np.mean(roi_pixels[:, 0])
    mean_g = np.mean(roi_pixels[:, 1])
    mean_b = np.mean(roi_pixels[:, 2])
    
    # 计算RGB整体均值(三个通道均值的平均值)
    mean_rgb = (mean_r + mean_g + mean_b) / 3
    
    # 收集当前ROI的特征数据
    roi_mean_values.append({
        'ROI': label,
        'Mean_R': mean_r,
        'Mean_G': mean_g,
        'Mean_B': mean_b,
        'Mean_RGB': mean_rgb
    })

# 转为DataFrame并保存到CSV
roi_mean_df = pd.DataFrame(roi_mean_values)
roi_mean_df.to_csv("roi_mean_values.csv", index=False)

print("各建筑ROI的RGB颜色特征已保存至 'roi_mean_values.csv'。")

代码说明

  • 连通区域分析:measure.label会将图像中连通的非黑区域标记为不同标签,确保每个独立建筑被识别为一个完整ROI。
  • 掩码提取ROI:通过标签掩码精准提取对应ROI的所有像素,彻底避免原代码的误分割问题。
  • 颜色特征计算:分别计算R、G、B单通道均值,再通过三个通道均值的平均得到RGB整体均值,满足需求中的四个特征值。
  • CSV保存:将所有ROI的特征整理为结构化DataFrame,保存为无索引的CSV文件,便于后续分析。

注意事项

  • 确保图像背景为严格纯黑(像素值全为0),若存在灰度噪声,可添加skimage.morphology.remove_small_objects处理掩码,去除小噪声区域。
  • 若图像为8位深度(像素值0-255),计算得到的均值为浮点型,可根据需求用int()转换为整数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 13:42:43