示例代码:
import numpy as np
from skimage import measure
list0 = [0,0,0,0,2,0,0,3,0,0,0,0,3,3,0,0,0,0,3,0,0,0,0,0,0,3,0,0,0,0,3,3,0,0,0,0]
testa0 = np.array(list0).reshape(6,6)+1 #0会被忽略掉,但是我这里会要使用,所以+1
testa1 = measure.label(testa0, connectivity = 2)#8连通
testa2 = measure.label(testa0, connectivity = 1)#4连通
#如果想分别对每一个连通区域进行操作,比如计算面积、外接矩形、凸包面积等,则需要调用#measure子模块的regionprops()函数
props = measure.regionprops(testa1)
numPix = []
for ia in range(len(props)):
numPix += [props[ia].area]
#像素最多的连通区域及其指引
maxnum = max(numPix)
index = numPix.index(maxnum)
#最大连通区域的bounding box
minr, minc, maxr, maxc = props[index].bbox#[minr, maxr),[minc, maxc)
#最大连通区域中的原始值
classPlat = testa0[minr,minc]-1
print(props[index].bbox)
print(classPlat)
可以自行输出每步的结果查看
skimage.measure.regionprops(label_image)
属性名称 | 类型 | 描述 |
---|---|---|
area | int | 区域内像素点总数 |
bbox | tuple | 边界外接框(min_row, min_col, max_row, max_col) |
centroid | array | 质心坐标 |
convex_area | int | 凸包内像素点总数 |
convex_image | ndarray | 和边界外接框同大小的凸包 |
coords | ndarray | 区域内像素点坐标 |
Eccentricity | float | 离心率 |
equivalent_diameter | float | 和区域面积相同的圆的直径 |
euler_number | int | 区域欧拉数 |
extent | float | 区域面积和边界外接框面积的比率 |
filled_area | int | 区域和外接框之间填充的像素点总数 |
perimeter | float | 区域周长 |
label | int | 区域标记 |