超像素是把一张图片中具有相似特征的像素进行聚类,形成一个更具有代表性的大“像素”。 本文记录相关内容。
其中 N 为像素个数,可以理解为每个超像素面积为 N/k,S 为边长
该范围限制了每个中心的计算区域,大大加速了 Kmeans 算法的运算速度 这种方法不仅减少了距离计算,而且使得SLIC的复杂性与超像素的数量无关
retval = cv2.ximgproc.createSuperpixelSLIC(image[, algorithm[, region_size[, ruler]]] )
import cv2
img = cv2.imread("./cat.png")
#初始化slic项,超像素平均尺寸20(默认为10),平滑因子20
slic = cv2.ximgproc.createSuperpixelSLIC(img,region_size=20,ruler = 20.0)
slic.iterate(10) #迭代次数,越大效果越好
mask_slic = slic.getLabelContourMask() #获取Mask,超像素边缘Mask==1
label_slic = slic.getLabels() #获取超像素标签
number_slic = slic.getNumberOfSuperpixels() #获取超像素数目
mask_inv_slic = cv2.bitwise_not(mask_slic)
img_slic = cv2.bitwise_and(img,img,mask = mask_inv_slic) #在原图上绘制超像素边界
cv2.imshow("img_slic",img_slic)
cv2.waitKey(0)
cv2.destroyAllWindows()