skimage.measure求最大连通区域

示例代码:

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)

属性名称类型描述
areaint区域内像素点总数
bboxtuple边界外接框(min_row, min_col, max_row, max_col)
centroidarray质心坐标
convex_areaint凸包内像素点总数
convex_imagendarray和边界外接框同大小的凸包
coordsndarray区域内像素点坐标
Eccentricityfloat离心率
equivalent_diameterfloat和区域面积相同的圆的直径
euler_numberint区域欧拉数
extentfloat区域面积和边界外接框面积的比率
filled_areaint区域和外接框之间填充的像素点总数
perimeterfloat区域周长
labelint区域标记
  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
要使用 `skimage` 识别钟表时间,可以使用以下步骤: 1. 读取图像并将其转换为灰度图像 ```python from skimage import io, color from skimage.filters import threshold_otsu image = io.imread('clock_image.jpg') gray_image = color.rgb2gray(image) ``` 2. 使用 Otsu 阈值分割将图像转换为二进制图像 ```python thresh = threshold_otsu(gray_image) binary_image = gray_image <= thresh ``` 3. 使用 `skimage.measure.label` 函数获取二进制图像中的连通区域 ```python from skimage.measure import label label_image = label(binary_image) ``` 4. 使用 `skimage.measure.regionprops` 函数获取每个连通区域的属性,例如中心坐标和面积 ```python from skimage.measure import regionprops clock_regions = [] for region in regionprops(label_image): if region.area >= 10000: clock_regions.append(region) ``` 5. 对于每个钟表区域,计算其中心坐标,并使用这些坐标来确定钟表上的指针位置 ```python from math import atan2, pi for clock_region in clock_regions: center_row, center_col = clock_region.centroid for angle in range(0, 360, 30): angle_rad = angle * pi / 180 pointer_row = int(center_row + 100 * sin(angle_rad)) pointer_col = int(center_col + 100 * cos(angle_rad)) if binary_image[pointer_row, pointer_col]: print(f"Clock at ({center_row}, {center_col}) shows {angle} degrees") break ``` 这是一个简单的方法来使用 `skimage` 识别钟表时间。然而,这种方法可能不是非常准确,因为它假定钟表上的数字和指针都是清晰可辨的。更复杂的方法可能需要使用深度学习模型或更复杂的图像分割和特征提取技术。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sophia_xw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值