171.SLIC超像素区域分割

2025-11-08  本文已影响0人  大龙10

10. 轮廓与图像分割索引

一、基于超像素的区域分割

二、SLIC 超像素区域分割

三、函数

cv.ximgproc.createSuperpixelSLIC(image[, algorithm=SLICO, region_size=10, ruler=10.0f]) → retval

参数说明:

四、例程

# 11.28 SLIC 超像素区域分割
# 注意:本例程需要 opencv-contrib-python 包的支持
img = cv2.imread(r"E:/OpenCV/barbara.bmp", flags=1)  # 读取彩色图像(BGR)
imgHSV = cv2.cvtColor(img, cv2.COLOR_BGR2HSV_FULL)  # BGR-HSV 转换

# SLIC 算法
slic = cv2.ximgproc.createSuperpixelSLIC(img, region_size=10, ruler=10.0)  # 初始化 SLIC
slic.iterate(10)  # 迭代次数,越大效果越好
label_slic = slic.getLabels()  # 获取超像素标签
number_slic = slic.getNumberOfSuperpixels()  # 获取超像素数目
mask_slic = slic.getLabelContourMask()  # 获取 Mask,超像素边缘 Mask==1
mask_color = np.array([mask_slic for i in range(3)]).transpose(1, 2, 0)  # 转为 3 通道
# mask_color= cv2.COLOR_GRAY2RGB(mask_slic)  # 灰度 Mask 转为 RGB
img_slic = cv2.bitwise_and(img, img, mask=cv2.bitwise_not(mask_slic))  # 在原图上绘制超像素边界
imgSlic = cv2.add(img_slic, mask_color)

plt.figure(figsize=(9, 7))
plt.subplot(221), plt.axis('off'), plt.title("Origin image")
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))  # 显示 img(RGB)
plt.subplot(222), plt.axis('off'), plt.title("SLIC mask")
plt.imshow(mask_slic, 'gray')
plt.subplot(223), plt.axis('off'), plt.title("SLIC image")
plt.imshow(cv2.cvtColor(img_slic, cv2.COLOR_BGR2RGB))
plt.subplot(224), plt.axis('off'), plt.title("SLIC image")
plt.imshow(cv2.cvtColor(imgSlic, cv2.COLOR_BGR2RGB))
plt.tight_layout()
plt.show()

五、资料

youcans_的博客:
https://blog.csdn.net/youcans/article/details/124576469
```



上一篇 下一篇

猜你喜欢

热点阅读