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

如何在scikit-image输出图像显示regionprops标签以匹配各区域测量值

实现分割区域标签标注的方法

你可以通过获取每个分割区域的质心坐标,在图像上叠加标注文本,直接建立标签和测量数据的对应关系,修改后的参考代码如下:

import cv2
import numpy as np
from matplotlib import pyplot as plt
from skimage import measure, io, img_as_ubyte
from skimage.color import label2rgb, rgb2gray
import pandas as pd

img = cv2.imread("F:\py_image_pro\pore.jpg", 0)
scale = 0.086 # 1像素对应的微米数

# 阈值分割+去除边缘连通域
from skimage.filters import threshold_otsu
threshold = threshold_otsu(img)
thresholded_img = img < threshold
from skimage.segmentation import clear_border
edge_touching_removed = clear_border(thresholded_img)

label_image = measure.label(edge_touching_removed, connectivity=img.ndim)
image_label_overlay = label2rgb(label_image, image=img)

# 生成测量数据表
props = measure.regionprops_table(label_image, img, properties=['label', 'area', 'equivalent_diameter', 'mean_intensity', 'solidity'])
df = pd.DataFrame(props)
df = df[df['area'] > 20]
df['area_in_microns'] = df['area'] * (scale**2)
df['equivalent_diameter_microns'] = df['equivalent_diameter'] * (scale)
print(df.head())

# 新增标签标注逻辑
plt.imshow(image_label_overlay)
# 遍历所有分割区域获取质心和标签
for region in measure.regionprops(label_image):
    # 跳过面积小于20的区域,和表格筛选逻辑保持一致
    if region.area < 20:
        continue
    # centroid返回格式为(行坐标y, 列坐标x),matplotlib的text参数顺序为(x,y,文本内容)
    y, x = region.centroid
    # 标注标签号,颜色、字号可根据图像情况调整,ha/va参数保证文本在区域中心对齐
    plt.text(x, y, str(region.label), color='white', fontsize=12, ha='center', va='center')
plt.show()

如果需要直接在图上标注面积、等效直径等测量数据,只需修改plt.text的文本内容即可,比如替换为f"{region.label}:{region.area*(scale**2):.2f}μm²"就能同时显示标签和对应面积。
标注的标签号和DataFrame里的label列完全对应,直接查表即可获取该区域的所有测量参数。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:06:02