超像素分割cv2代码示例

示例程序的基本流程如下。

  • 阅读图片
  • 将输入图像的色彩空间从BGR转换为HSV。
  • 创建一个超像素实例。 cv2.ximgproc.createSuperpixel ***()
  • 计算参数设置。迭代(),forcenLabelConnectivity()
  • 获取细分的边界。 getLabelContourMask()
  • 在读取的彩色图像中反映边界线。
  • 显示

关于输入图像

F-15_400x533.jpg
输入图像使用上面的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

超级像素种子

示例程序

种子

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

超像素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实例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值