示例程序的基本流程如下。
- 阅读图片
- 将输入图像的色彩空间从BGR转换为HSV。
- 创建一个超像素实例。 cv2.ximgproc.createSuperpixel ***()
- 计算参数设置。迭代(),forcenLabelConnectivity()
- 获取细分的边界。 getLabelContourMask()
- 在读取的彩色图像中反映边界线。
- 显示
关于输入图像
![F-15_400x533.jpg](https://i1.wp.com/qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F391380%2F9b423f18-d556-52ff-072c-94af608a4dea.jpeg?ixlib=rb-1.2.2&auto=format&gif-q=60&q=75&s=477ddb07699d5e2554e683b3321b3012)
输入图像使用上面的F-15图像。
图片来源是国防部网站上的"自卫队摄影工作室"的图像,该图像已缩小为400x533。
超级像素LSC
示例程序
lsc.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | import cv2 import numpy as np
def main(): image = cv2.imread('F-15_400x533.jpg')
# BGR-HSV変換 converted = cv2.cvtColor(image, cv2.COLOR_BGR2HSV_FULL)
# パラメータ region_size = 20 ruler = 0.1 min_element_size = 10 num_iterations = 4
# LSCインスタンス生成 slc = cv2.ximgproc.createSuperpixelLSC(converted, region_size,float(ruler)) slc.iterate(num_iterations) slc.enforceLabelConnectivity(min_element_size)
# スーパーピクセルセグメンテーションの境界を取得 contour_mask = slc.getLabelContourMask(False) image[0 < contour_mask] = (0, 255, 255) cv2.imshow('LSC result', image) cv2.waitKey(0)
if __name__ == '__main__': main() |
使用cv2.ximgproc.createSuperpixelLSC()函数设置参数并创建LSC实例。
设置生成和计算参数。
获取边界线信息并将其反映在加载的图像中以进行显示。
超像素LSC实例
retval = cv.ximgproc.createSuperpixelLSC(图像[,region_size [,标尺]]])
image-分段图像
region_size-超像素的平均大小
标尺-超级像素平滑系数
retval-返回值:LSC实例
超像素LSC执行结果
![LSC_result.jpg](https://i1.wp.com/qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F391380%2Fe4c58bf0-65f2-4f9e-dd49-ca102bf25de0.jpeg?ixlib=rb-1.2.2&auto=format&gif-q=60&q=75&s=01e07ad9b89c2488d9598e46b61f036d)
超级像素种子
示例程序
种子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | import cv2 import numpy as np
def main(): image = cv2.imread('F-15_400x533.jpg')
# パラメータ height, width, channels= image.shape[:3] num_iterations = 5 prior = 2 double_step = True num_superpixels = 700 num_levels = 4 num_histogram_bins = 5
# スーパーピクセルSEEDSの生成 seeds = cv2.ximgproc.createSuperpixelSEEDS(width, height, channels, num_superpixels, num_levels, prior, num_histogram_bins, double_step)
converted = cv2.cvtColor(image, cv2.COLOR_BGR2HSV_FULL)
# 画像のスーパーピクセルSEEDSを計算 seeds.iterate(converted, num_iterations)
# スーパーピクセルセグメンテーションの境界を取得 contour_mask = seeds.getLabelContourMask(False) result = image.copy() result[0 < contour_mask] = (0, 255, 255)
# 画像表示 cv2.imshow('SEEDS result', result) cv2.waitKey(0)
if __name__ == '__main__': main() |
cv2.ximgproc.createSuperpixelSEEDS()用于创建实例,但在此阶段
不设置输入图像。使用iterate()方法设置输入图像。
超级像素SEEDS
的实例化
retval = cv.ximgproc.createSuperpixelSEEDS(图像宽度,图像高度,图像通道,
num_superpixels,num_levels [,先前[,histogram_bins [,double_step]]])
image_width-图像宽度
image_height-图像高度
image_channels-图像通道
num_superpixels-所需的超像素分割数
num_levels-块级别数
优先级-平滑选项(0-5)启用3x3平滑。
histogram_bins-直方图箱数
double_step-如果为True,则将每个块级别加倍以提高准确性
retval-返回值:Superpixel SEEDS
的实例
超像素SEEDS执行结果
![SEEDS_result.jpg](https://i1.wp.com/qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F391380%2F51e3a7b8-e53c-ce05-da03-0e3a56fda01d.jpeg?ixlib=rb-1.2.2&auto=format&gif-q=60&q=75&s=1b237459a46eeb03af018722bbb1cf22)
超像素SLIC
示例程序
切片
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | import cv2 import numpy as np
def main(): image = cv2.imread('F-15_400x533.jpg')
# パラメータ algorithms = [ ('SLIC', cv2.ximgproc.SLIC), ('SLICO', cv2.ximgproc.SLICO), ('MSLIC', cv2.ximgproc.MSLIC) ] region_size = 20 ruler = 30 min_element_size = 10 num_iterations = 4
# BGR-HSV変換 converted = cv2.cvtColor(image, cv2.COLOR_BGR2HSV_FULL) for alg in algorithms: slic = cv2.ximgproc.createSuperpixelSLIC(converted, alg[1], region_size,float(ruler)) slic.iterate(num_iterations) slic.enforceLabelConnectivity(min_element_size) result = image.copy()
# スーパーピクセルセグメンテーションの境界を取得 contour_mask = slic.getLabelContourMask(False) result[0 < contour_mask] = (0, 255, 255) cv2.imshow('SLIC ('+ alg[0] + ') result', result) cv2.imwrite('images/SLIC_'+alg[0]+'_result.jpg', result) cv2.waitKey(0)
if __name__ == '__main__': main() |
基本主体与Super Pixel LSC相同。
由于我们正在执行3种类型的算法,因此正在循环。
超像素SLIC
的实例化
retval = cv.ximgproc.createSuperpixelSLIC(图像[,算法[,region_size [,标尺]]])
image-分段图像
算法-算法(SLIC,SLICO,MSLIC)
region_size-超像素的平均大小
标尺-超级像素平滑系数
retval-返回值:超像素SLIC实例